如何解决一维数组---->二维或多维数组代码
直到最后 3 个换行符为止,整个代码都可以,但我想检查是否有办法正确编写它
完整代码:
float mat_add(float A[],float B[],float C[]);
{
x=0,y=0;
int row_num,colm_num,chk_row,chk_colm;
do
{
fflush(stdout);
printf("PLEASE! choose Array 'A' Rank (maximum 4x4)==>\n\n");
sleep(1);
printf(" \a 'A' rows= ");
chk_row =scanf("%i",&row_num);
printf(" 'A' columns= ");
chk_colm =scanf("%i",&colm_num);
if( chk_row!=1||chk_colm!=1||row_num>4 || row_num<0|| colm_num>4 || colm_num<0) //restrictions for user input
{
printf("\n \a Failure!!----> Your Array Rank is not accepted !!.");
sleep(1);
printf("\n \n -----PLEASE!----- re-input your values ==>\n\n");
}
sleep(2);
}while( chk_row!=1||chk_colm!=1|| row_num>4 || row_num<0|| colm_num>4 || colm_num<0); //restrictions for user input
x=row_num ;
y=colm_num;
A[]=A[x][y];
printf("\n\n\t \a Success!!---> Array 'A' set to rank = %ix%i i.e. (A[%i][%i]). \n\n",row_num,colm_num);
x,y 全局声明!
解决方法
我可以这样做吗 A[ ]=A[2][3] 例如?
签名:
float mat_add(float A[],float B[],float C[]);
传入指向三个数组的指针。因此,在调用此函数之前,数组的维度必须已经固定。
您尚未将声明发布到这些数组中,因此我们无法知道(并且代码也无法知道)这些数组的维度。
所以当代码说:
A[]=A[x][y];
无法知道索引 X
和 Y
是否在这些数组的边界内。
这部分表达式:
A[]
将数组的地址作为目标(L 值)并将数组 A[2][3]
中条目的内容分配给 ??? A[0][0] ???
这不是一个安全的任务。除其他问题外,如果没有(数组中至少有 3 行和至少 4 列)怎么办
另外,编译器不知道数组的每一行有多少列,所以编译器不知道通过内存索引多远才能访问每一行(超出0
行)
结果是未定义的行为
建议将签名更改为:
float mat_add( int rows,int columns,float A[ rows ][ columns ],etc ;
然后,在使用 x
和 y
之前,检查那些(来自用户的输入)变量是否 >0 并且对于 x
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。