C 指向二维数组的指针
我有一个2D数组int s[4][2],我创建了一个指针int*p[2] 指针p现在被分配给for循环中行的第一个元素的地址C 指向二维数组的指针,c,arrays,pointers,C,Arrays,Pointers,我有一个2D数组int s[4][2],我创建了一个指针int*p[2] 指针p现在被分配给for循环中行的第一个元素的地址 for (int i = 0; i<4; i++) p = &s[i]; 但是,如果我创建另一个指针并将其与上一个指针链接 int *ptr = p; 解引用指针ptr,我得到正确的值 printf ("%d \n", *ptr) 当两个指针都指向同一地址时,为什么一个指针*ptr按预期工作,而另一个*p不返回预期值?By int (*ptr)[2]
for (int i = 0; i<4; i++)
p = &s[i];
但是,如果我创建另一个指针并将其与上一个指针链接
int *ptr = p;
解引用指针ptr,我得到正确的值
printf ("%d \n", *ptr)
当两个指针都指向同一地址时,为什么一个指针*ptr按预期工作,而另一个*p不返回预期值?By
int (*ptr)[2] ; // means int[2]<-(*ptr)
输出
借
输出
如果p是指向数组的指针,那么*p是2整数的数组int[2]。因此,不能像这样打印数组元素:
printf ("%d \n", *p);
要通过指针p打印数组元素,需要执行以下操作:
printf ("%d \n", (*p)[0]); /* first element */
printf ("%d \n", (*p)[1]); /* second element */
如果p是指向数组的指针,那么*p是2整数的数组int[2]。因此,不能像这样打印数组元素:
printf ("%d \n", *p);
要通过指针p打印数组元素,需要执行以下操作:
printf ("%d \n", (*p)[0]); /* first element */
printf ("%d \n", (*p)[1]); /* second element */
p不是指向int的指针。它是指向两个int数组的指针。因此*p也是两个int数组。因为它不是int,所以使用%d打印它会产生未定义的行为
由于类型不匹配,您将无法将ptr链接到p。ptr是指向int的指针,而p是指向两个int的数组的指针。因此分配ptr=p不会编译。如果您强制它编译,例如ptr=int*p,那么ptr和p将具有相同的值,即它们将标识内存中相同的位置,但类型不同,即取消引用它们将以不同的方式解释该内存的内容
忽略p类型的值将是s[0][0]的地址。类似地,ptr的值将是s[0][0]的地址
因此,printf%d\n,*ptr将打印s[0][0]的值。p不是指向int的指针。它是指向两个int数组的指针。因此*p也是两个int数组。由于它不是int,使用%d打印它会产生未定义的行为
由于类型不匹配,您将无法将ptr链接到p。ptr是指向int的指针,而p是指向两个int的数组的指针。因此分配ptr=p不会编译。如果您强制它编译,例如ptr=int*p,那么ptr和p将具有相同的值,即它们将标识内存中相同的位置,但类型不同,即取消引用它们将以不同的方式解释该内存的内容
忽略p类型的值将是s[0][0]的地址。类似地,ptr的值将是s[0][0]的地址
结果printf%d\n,*ptr将打印s[0][0]的值
当两个指针都指向同一地址时,为什么一个指针*ptr按预期工作,而另一个*p不返回预期值
*p计算为int[2],一个数组
将数组int[2]传递给函数会导致将指针传递给数组的第一个元素int*
*ptr的计算结果为int
将int传递给函数会导致将int传递给函数…:-
当两个指针都指向同一地址时,为什么一个指针*ptr按预期工作,而另一个*p不返回预期值
*p计算为int[2],一个数组
将数组int[2]传递给函数会导致将指针传递给数组的第一个元素int*
*ptr的计算结果为int
将int传递给函数会导致将int传递给函数…:-
你能给出一个代码示例吗?什么是*p类型?请编辑你的问题并修改你的问题。请在此处附上您的代码,而不是在注释中。您能给出一个代码示例吗?什么是*p类型?请编辑您的问题并修改您的问题。将代码附加到此处,而不是注释中。
printf ("%d \n", (*p)[0]); /* first element */
printf ("%d \n", (*p)[1]); /* second element */