指针,二级指针

作者在 2011-09-11 09:16:18 发布以下内容
#include<stdio.h>
void main()
{
    int a[5]={2,4,6,8,10},*p,**k;
    p=a;
    k=&p;
    printf("%d",*(p++));
    printf("%d\n",**k);
}
程序输出()
A.4
B.22
C.24
D.46
大家思考一下,给出答案。
答案是:C.24
 
C语言问题 | 阅读 1347 次
文章评论,共4条
lhklcf
2011-09-11 10:31
1
答案 是&nbsp;&nbsp;2&nbsp; &nbsp; 和&nbsp;&nbsp;4,p++,先付值后加1,所以*(p++)是说的p【0】指向的值, *k存的是p的地址,**k就是p所指向的值,经过第一个printf语句后 现在p已经加1,指向的已经是第二个值 即a【1】;因此输出了4. 大体就是这样子的。表达的不太清楚你再看看
laznrbfe(作者)
2011-09-11 10:32
2
<div class="quote"><span class="q"><b>lhklcf</b>: 答案 是&nbsp;&nbsp;2&nbsp; &nbsp; 和&nbsp;&nbsp;4,p++,先付值后加1,所以*(p++)是说的p【0】指向的值, *k存的是p的地址,**k就是p所指向的值,经过第一个printf语句后 现在p已经加1,指向</span></div><img src="image/face/2.gif" class="face">
edwardflee
2011-09-14 16:32
3
在论坛里看见这道题的时候就懵了,跑你这又晕一次,答案要有44我肯定选错了。该死的p++,哼!
laznrbfe(作者)
2011-09-14 23:24
4
<div class="quote"><span class="q"><b>edwardflee</b>: 在论坛里看见这道题的时候就懵了,跑你这又晕一次,答案要有44我肯定选错了。该死的p++,哼!</span></div><img src="image/face/2.gif" class="face"><br />
printf(&quot;%d&quot;,*(p++));//先输出*p;再p++,指向下一个地址<br />
printf(&quot;%d\n&quot;,**k);/*因为p指向了下一个地址,此时p=&amp;a[1],又因为k=&amp;p,所以*k=&amp;a[1],**k=a[1]。(我是这样理解的)*/
游客请输入验证码
浏览48153次