可以指针阵列和二维阵列视为相同

时间:2017-07-17 13:58:53

标签: c

任何人都可以告诉两个实体是否 - 即 二维数组char array[][9]和 指针数组char *array[9]相同或不同??

1 个答案:

答案 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)个字节的元素并获取值。