关于C语言题目

设有变量定义:staticinta[10]={1,3,5,7,9};int*p=a;执行语句printf("%d",*p++**++p);输出的值是多少?请详细讲解下整个... 设有变量定义:
static int a[10]={1,3,5,7,9};
int * p=a ;
执行语句printf("%d",*p++**++p); 输出的值是多少? 请详细讲解下整个运算的过程,谢谢。
展开
 我来答
开小星0S
2011-02-08
知道答主
回答量:37
采纳率:0%
帮助的人:21.6万
展开全部
*p++**++p可以看作: (*p++)*(*++p) 即为(*p++) 与(*++p)的相乘。
1、首先明白(*p++) :
这又可以看作:(*p)++
因为指针p一开始指着a[0],所以*p为1,其后面的++可忽略,即(*p++)为1。
2、再明白(*++p)
这又可以看作: *(++p)
++p的作用:将指针p向后移。所以,p指针已指着a[1]。所以再执行取内容符“*”,
最后*(++p)的值为a[1]的内容,即为3。
3、两者相乘得3
4、最后输出3
随枫轻逝
2011-02-08 · 超过28用户采纳过TA的回答
知道答主
回答量:165
采纳率:0%
帮助的人:96.4万
展开全部
应该是1乘以5吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
有钱买不起房子
2011-02-08 · TA获得超过4324个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2058万
展开全部
要执行printf(),一般输出参数是按右向左计算的。在考虑优先级顺序,*和++同级,都高于*(乘号)
*p++**++p先计算++p,这样p指向a[1]为3,然后在执行*p++ * 3=3*3=9,最后p自增到a[2]
这样printf()显示是9,然后p指向a[2]=5。
至于++p和p++,在这里是不同的,++p是先增加p在参与计算
而p++是p先参与计算,然后p在增加1.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ajlija
2011-02-09 · TA获得超过939个赞
知道大有可为答主
回答量:1118
采纳率:0%
帮助的人:1057万
展开全部
你是在TC语言环境下吧?int占2个字节,k变量与char c[2]用的地址是同一片地址。k = -7,-7分为两个字节存储,当你输出c[0]和c[1]时,c[0]就是k的低字节位,c[2]就似乎k的高字节。-7二进制比较难算,举个简单例子,如果k=1,则其二进制为00000000 00000001,此时c[0] = 00000001,c[1] = 00000000,输出就是1,0了。-7一样,自己转转就出结果,原理就是这样。

补充:
我说的是TC,楼主应该也是在TC环境下,要不int不会占用2字节。int本身应该跟系统有关系,32位系统就应该占用4字节。
union共同体不是占用同一片空间?请问在哪种环境下不是呢,我所知道的好像都是描述为用同一片空间存储不同类型的变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式