我有一个二维数组(int s[4][2]),我创建了一个指针。
指针int (*p)[2]现在被分配给for循环中第1行元素的地址。

for (int i = 0; i<4; i++)
p = &s[i];

现在,当我尝试使用解引用来编写数组元素数据时,我得到了错误的值。
printf ("%d \n", *p)

但是,如果我创建另一个指针并将其与前一个指针链接
int *ptr = p;

解引用指针,得到正确的值。
printf ("%d \n", *ptr)

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

最佳答案

如果p是指向数组的指针,则*p是2个整数的数组(int[2])因此,不能打印这样的数组元素:

 printf ("%d \n", *p);

要通过指针打印数组元素,需要执行以下操作:
 printf ("%d \n", (*p)[0]); /* first element */
 printf ("%d \n", (*p)[1]); /* second element */

07-24 09:46
查看更多