为什么下面的代码会报错?为什么将printf那里的**p改为*p就对了?

2025-02-27 06:21:29
推荐回答(2个)
回答1:

很简单。
首先,int **p声明的是一个指向整型指针的指针。
然后,a[0]代表的是从a开始偏移为0的地址(记为X)处的那个值,&一下则是那个值所在的地址(即X),你将p赋值为这个地址。
那么*p就已经是那个值了,再*一下,就是再以那个值为地址处的值,这就不对了。

把a[0]改为a+0(或a)就是对的。主要原因其实就在于[]这个操作符,该操作符会取地址处的值。

回答2:

指针类型不匹配,你得看看指针和数组的知识了 a 和 &a[0]都是代表数组首元素的地址
p的类型和&a[0]的类型,如果你是要打印出a[0]的值,可以写成
int *p = a;
printf("%d\n", *p);