为什么在1D数组中使用*q
时它会给出数组中的值,而2D数组中的*p
会给出一个地址。是不是*pointer_name
应该告诉存储的内容,为什么输出地址而不是40
(数组中的值)?
#include<stdio.h>
int main(){
int a[3][4] = {
{40, 1, 2, 3} ,
{4, 5, 6, 7} ,
{8, 9, 10, 11}
};
int (*p)[4] = a;
int b[4] = {3,4,8,5};
int *q = b;
printf("%d, %d",*q, *p);// output- 3, 10485040
return 0;
}
答案 0 :(得分:3)
因为p
是指向数组的指针。当您取消引用p
时,数组将衰减为指向第一个元素的指针。执行*p
和&(*p)[0]
是等效的(也等同于&a[0][0]
)。
如果要打印第一个元素,则需要取消引用两个指针,即**p
。
答案 1 :(得分:0)
2D数组表示数组数组!所以2D数组中第一行的每个槽都应该有另一个数组的地址。
例如,如果您有一个数组a[2][3]
,则a[0]
值是大小为4的数组的第一个插槽的地址,而a[1]
就是这样等。