解释一段C程序

[复制链接]
查看11 | 回复1 | 2011-6-27 02:10:43 | 显示全部楼层 |阅读模式
#includestdio.h
intmain()
{
inta[5]={2,4,6,8,10},*p,**k;
p=a;k=
printf(\"%d\",*(p));
printf(\"%d\\n\",**k);


}

输出结果为什么24
回复

使用道具 举报

千问 | 2011-6-27 02:10:43 | 显示全部楼层
可能定义的时候分开写会有助于理解:
inta[5]={2,4,6,8,10};
int*p;//定义了一个指向整型变量的指针,p存放int类型的地址;
int**k//定义了一个指向指向整型变量的指针的指针(这句话有点拗口,自己慢慢体会一下),指针其实就是像整型一样的数据类型,它也可以被另一个指针指向;就是说k是指针的指针,k存放的是p那种int*类型的地址;

第一个输出是2不明白是吧?
首先你要明白p的含义,即p在当前语句中依然以p的初值进行计算,执行完当前这个语句后p才等于p1;
举个例子:n=2;a=1n;最后a=3;n=3;
所以printf(\"%d\",*(p));可以分开写成printf(\"%d\",*(p));p=p1;下面就分三步:

1.前面有p=a,所以p存放了数组a第一个元素的地址,所以*p就是2;
2.执行完上面那个语句后,p马上等于p1,所以这时p又指向了a数组中第二个元素;
3.前面有k=*k就等价于p;所以*(*k)就等价于*p了..第二步p指向了a数组中第二个元素,那*p是多少就不用我说了吧...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行