c语言数组问题,不太明白这里的**k是什么意思,还有就是k=&p,答案是4 6

如题所述

第1个回答  2015-07-29
k是指向指针的指针,赋值的时候把p的地址赋给了k,因为p是指针,取了它的地址才是指向指针的指针。
输出的结果,第一个应该打印出a[0]的值,第二个应该打印出a[1]的值,答案是2 4追问

为什么分别输出的是a [ 0 ] .a [ 1 ] 的值?*(p++)是怎么运行的

追答

*(p++) 的意思是先取出*p,之后再让p自加1,所以*(p++)的返回值是a[0]。
运行到后一个printf语句时,由于p已经自加过1,此时p是指向a[1]的,**k就是*p,所以返回的是a[1]的值。

追问

大神,*(p++)和*p++有什么区别吗?

是因为p也是指针,所以k指向p的时候要写成**k么?*k有什么意义么?

追答

> *(p++)和*p++有什么区别吗?

两者的动作是一样的。

> 是因为p也是指针,所以k指向p的时候要写成**k么?*k有什么意义么?
 是因为p也是指针,所以想要指向p,就必须定义成int **k; 第一个*是代表p的类型,
第二个*才是代表k的类型,阅读的时候也就是理解为k是一个指针,k指向的类型并不是int型,而是int *型。所以*k也等同于p,即*k是一个int *类型,而不像*p那样是int类型。
修改*k就相当于对p的值进行修改,例如,如果还有一个数组b[],
我们执行 *k=b;
那么之后p就会指向b数组,而不再指向a数组。

追问

十分感谢,谢谢啦

本回答被提问者采纳
相似回答