c语言二级指针中二级指针p,*p是地址还是值,为什么有的时候就是值而不是地址

如题所述

对于一级指针而言,*p是取值,对于二级指针而言,*p是取地址,但是地址又是无符整形数据,所以在二级指针中你把*p当值来用的话,编译不报错,但是不合规定。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-23
这个问题也是困扰的,我到现在都有点乱。
p是指针,有就是地址。
*p是指针向的值。
对于数值型的,这样理解没错。
不过对于字符等其他类型有点怪,举个例子:
char str=“abc”,*p;
p=&str;
输出*p 结果是a
输出p 结果是abc。本回答被网友采纳
第2个回答  2015-12-23
p是指向指针的指针,对p取值当然还是个指针追问

char*a[]={"1","2","3"}
char**p
p=a
书上说*p输出的是1而不是a[0]的地址,是怎么回事

追答

这里a是一个指针数组,数组内每个元素都是一个指向字符串的指针,所以可以看做一个复杂的二级指针,只不过你要显示字符串时不需要再次对其用“*“取值(这方面不懂可以去搜指针字符串)。又因为数组名可以看做是指向数组第一个元素的指针,所以*a就是a[0],因为你把这个二级指针的首地址赋值给了p,所以*p相当于*a啦

相似回答