我有一个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)不返回预期值?
如果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)