Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指向二维数组的指针_C_Arrays_Pointers - Fatal编程技术网

C 指向二维数组的指针

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]

我有一个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] ; // 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 */