指向2D数组的指针

Sai*_*eep 1 c arrays pointers

我有一个2D数组(int s[4][2]),我创建了一个指针int (*p)[2].

现在为指针p分配了for循环中第一行元素的地址.

for (int i = 0; i<4; i++)
p = &s[i];
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试使用解除引用来编写数组元素数据时,我得到了错误的值.

printf ("%d \n", *p)
Run Code Online (Sandbox Code Playgroud)

但是,如果我创建另一个指针并与前一个指针链接

int *ptr = p;
Run Code Online (Sandbox Code Playgroud)

和取消引用指针ptr我得到正确的值.

printf ("%d \n", *ptr)
Run Code Online (Sandbox Code Playgroud)

当两个指针指向同一个地址时,为什么一个指针(*ptr)按预期工作而另一个(*p)不返回预期值?

usr*_*usr 8

如果p是指向数组的指针则*p是2个int()的数组int[2].所以,你不能像这样打印一个数组元素:

 printf ("%d \n", *p);
Run Code Online (Sandbox Code Playgroud)

要通过指针打印数组元素p,您需要执行以下操作:

 printf ("%d \n", (*p)[0]); /* first element */
 printf ("%d \n", (*p)[1]); /* second element */
Run Code Online (Sandbox Code Playgroud)