任何人都可以告诉两个实体是否 - 即
二维数组char array[][9]
和
指针数组char *array[9]
相同或不同??
答案 0 :(得分:2)
他们是不同的。
最显着的区别在于,在数组的情况下,元素将在内存中有条理地排列,但在指针数组的情况下,它们不会。
为了能够使用指针数组的元素,你需要让它们指向一些有效的内存,你可以通过使用malloc()
或指向一个数组来做到这一点。在这两种情况下,指针所指向的潜在数组的元素都不是连续的。
您的困惑可能是由于数组可以在语法上用作指针,因为如果将数组传递给期望指针的函数,则它等效于指向此类数组的第一个元素的指针。
此外,
int x[3] = {1, 2, 3};
int *y = x;
是有效的,您可以使用y
,就好像它是一个数组,即使它不是。它是一个指针,您可以使用它来使用指针算法遍历数组x
的元素。
表达此类算法的一种方法是使用[]
语法,实际上是
int value = y[1]
等效于对y
执行指针算术运算并取消引用它,完全等同于
int value = *(y + 1);
即。移动到sizeof *y
开头后的(1×y
)个字节的元素并获取值。