请教高手C语言问题

[复制链接]
查看11 | 回复2 | 2008-3-22 19:08:26 | 显示全部楼层 |阅读模式
for(i=0;ia(值为3),将3压入堆栈,之后由于p++的作用使p指向了s[2];再计算(++p)->a,由于++p使p指向了s[3],所以这个表达式返回s[3].a的值,即7,压入堆栈。然后,printf()函数从堆栈中取值,首先出栈的是7,输出7,第二个出栈的是首先入栈的3,输出3。所以得到7,3有关printf()函数堆栈相关的内容,请参考下面的网页:参考资料:http://wiki.cprogram.cn/index.php/Printf%E5%87%BD%E6%95%B0%E8%BF%9B%E6%A0%88%E9%A1%BA%E5%BA%8F

已赞过已踩过a,(p++)->a);应该不同的编译器在这个地方的规定是不大一样的,你是要实现什么效果可以改成(p+1),或者其他,一个好的编程员应该尽量避免使用这样的句子,这样的编程习惯不好,很容易混乱。。。我用VC6.0编译的结果是5跟3,可能TC里面编译出来的结果是7跟3不一样的,你也不要太较真了
回复

使用道具 举报

千问 | 2008-3-22 19:08:26 | 显示全部楼层
printf("%d,%d\n",(++p)->a,(p++)->a);时,(++p)-->a相当于循环三遍时的数组值,所以是7,而,(p++)->a相当于循环一遍时的数组值
回复

使用道具 举报

千问 | 2008-3-22 19:08:26 | 显示全部楼层
#include
//包函头文件struct ks { int a; int *b; }s[4],*p;
//自定义一个结构体void main()
//主函数入口{ int n=1,i;
//定义整型变量n等于1printf("\n");
//输出一个换行符for(i=0;ia,(p++)->a); //(++p)是指先把P加1再做->命令,即P先指向S[2],故是5,(P++)->是指先让P指再S[1],再P自加1,故是3 }
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行