这两个C声明之间有什么区别

时间:2015-10-23 18:05:52

标签: c arrays pointers multidimensional-array

我声明并初始化了一个2x2数组,如下所示:

int arr[2][2] = {1, 2, 3, 4};

然后,指向整数的指针:

int *p1;

将指针初始化为:

p1 = arr[0];    //p1 points to {1, 2}

现在,我可以使用p1作为*p1

打印元素

现在,当我宣布:

int (*ptr)[2][2];
ptr = &arr;

要打印元素,现在我必须使用:

printf("%d\n", *(**(ptr)+1));

这两个声明之间有什么区别?

1 个答案:

答案 0 :(得分:1)

int (*ptr)[2][2];是指向2x2矩阵的指针,而不是指向int的指针。由于矩阵的每个维度都有点像指针,因此您需要在printf中进行额外的解除引用。