下面是两个二维数组 - 其中一个使用数组表示法声明,另一个使用指针表示法,(即,指向一组连续的一维数组(不是指针数组(的指针。
int array1[][3]={{1,2,3},{4,5,6}};
int (*array2)[3]={{1,2,3},{4,5,6}};
我能够使用数组和指针符号访问 array1 的元素。
//accessing the 3rd element of the first row (of array1)
printf("array1[0][2]=%d",array1[0][2]);//3
printf("n*(*array1+2)=%d",*(*array1+2));//3
但是,当我尝试访问 array2 的相同内容时,它会生成运行时错误。
//accessing the 3rd element of the first row (of array2)
printf("n*(*array2+2)=%d",*(*array2+2));
printf("narray2[0][2]=%d",array2[0][2]);
我声明这些数组的方式有问题吗?我也尝试将 array2 声明为静态,但它仍然生成错误。
为什么在使用指针表示法声明时会发生此错误? 我该如何纠正它?
但是,如果按如下方式替换最后 2 行,则没有错误:
printf("n(*array2+2)=%d",(*array2+2));//9
printf("narray2[2]=%d",array2[2]);//25
但这意味着什么?如果我给array2[3]
,那么值会增加 4(int 的大小(
此代码是非法的,因为标量的初始值设定项必须是单个表达式(可选地括在大括号中(:
int (*array2)[3]={{1,2,3},{4,5,6}};
应会收到编译器诊断消息。如果没有,请调整编译器设置。
您从任何生成的可执行文件中获得的行为都是没有意义的,因为这不是一个正确的 C 程序,因此问题的其余部分没有实际意义。
在 C u 中无法使用这种方法生成数组。
要生成固定大小的数组,您必须 int array[2][2] = {{1,2},{3,4}};
有了它,您可以将指针指向它并根据需要访问它;
void* p = (void*(array;
printf("%i",((int(p + 3((;//4