C语言题目,为什么

[复制链接]
查看11 | 回复2 | 2011-6-18 19:15:57 | 显示全部楼层 |阅读模式
main( )
{ int a[ ]={1,2,3,4,5};
int *p=a ;
printf("%d\n",*++p);
printf("%d\n",*p++);
printf("%d\n", (*p)++);
printf("%d\n",++*p);
}
执行结果为:
2
2
3
5

回复

使用道具 举报

千问 | 2011-6-18 19:15:57 | 显示全部楼层
首先要知道一开始p指向数组a的第一个元素a[0],也就是1.printf("%d\n",*++p);由于++符号在p前面,所以先执行移动指针操作,p指向数组第二个元素的地址a[1],然后解除引用,就是2.printf("%d\n",*p++);++在p后面,先解除引用输出,也就数组a的第二个元素2,然后让指针p移向下一个地址a[2].printf("%d\n", (*p)++);括号操作符优先于单目运算符++,先解除引用输出p指向地址的值也就是a[2]=3.然后p指针后移。指向a[3]。printf("%d\n",++*p);首先对指针p解除引用,*p的值为a[3]=4,然后执行++操作,++4=5.所以输出5.希望...
回复

使用道具 举报

千问 | 2011-6-18 19:15:57 | 显示全部楼层
int main(){int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};int *pa[3]={a[0],a[1],a[2]};int *p=a[0];int i;for(i=0;i<3;i++)printf("%d,%d,%d\n",a[2-i],*a,*(*(a+i)+i));for(...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行