c语言二级指针

如果把数组名a传递给形参**p,是不是*p=&a[0],p=a[0]?还是不太理解二级指针变量**p 、*p和p三者的关系

beyourpersonalbest
浏览 1487回答 2
2回答

onemoo

你没说明p和a是如何声明的,我先假定p是int **p,a是int a[xx]。那么 *p = a 和 *p = &a[0] 都对,p = a[0] 则不正确。p是指向int指针的指针,那么*p得到的就是一个int指针。同理**p就是那个p所指的指针指向的变量。数组名做右值时会自动转为指向其首元素的指针,所以 *p = a; 这句中右侧的a就相当于指向a[0]的指针,同样也是int指针,所以和*p的类型相同。&a[0] 得到的就是指向a首元素的指针,同样也和*p类型相同。a[0] 得到的元素就是int类型,无法直接转换为指针,所以不能赋值给*p。

onetwosix

其实对于指针的理解,个人觉得应该把指针当钥匙理解,例如:int *p ,a[10]; 在程序中p表示当前地址,用的时候*p是指p当前所在的地址中的元素。**P是二级指针指向一级指针.
打开App,查看更多内容
随时随地看视频慕课网APP