搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 有个笔试题看不懂?
标题:
有个笔试题看不懂?
只看楼主
魏新建
等 级:
论坛游民
帖 子:55
专家分:86
注 册:2012-2-17
结帖率:
100%
楼主
已结贴
√
问题点数:20 回复次数:14
有个笔试题看不懂?
int main(void)
{
int a[] = {6, 7, 8, 9, 10};
int *p = a;
*(p++) += 123; /* 其实没必要把p++扩起来,*和++在同一优先级,从右到左的结合顺序 */
printf("%d, %d\n", *p, *(++p));
return 0;
}为何输出的是8,8
搜索更多相关主题的帖子:
void
return
优先级
2012-04-10 14:50
飞莲
等 级:
论坛游民
帖 子:42
专家分:64
注 册:2011-12-28
第
2
楼
得分:0
应该是printf是从右往左吧
2012-04-10 15:10
embed_xuel
等 级:
贵宾
威 望:
58
帖 子:3845
专家分:11385
注 册:2011-9-13
第
3
楼
得分:0
这笔试题出得可一般了
总有那身价贱的人给作业贴回复完整的代码
2012-04-10 15:36
yanshuili
来 自:揭阳
等 级:
论坛游民
帖 子:22
专家分:10
注 册:2011-3-28
第
4
楼
得分:0
int main(void)
{
int a[] = {6, 7, 8, 9, 10};
int *p = a; /*这里的 *p = a[0] */
*(p++) += 123; /* *(p++)= *(p++) + 123 第一个*(p++)等于a[1] 第二个*(p++)等于a[2]就是8 这时前面的*(p++)=130 */
printf("%d, %d\n", *p, *(++p)); /* *(++p)= a[2] */
return 0;
}
2012-04-10 16:07
C_596322153
来 自:徽州
等 级:
侠之大者
帖 子:182
专家分:466
注 册:2012-1-10
第
5
楼
得分:0
int main(void)
{
int a[] = {6, 7, 8, 9, 10};
int *p = a;
*(p++) += 123; //这句运行 p 先使用后自加一,即:a[0] = 123; 运行后 p 等于 &a[1] ;
printf("%d, %d\n", *p, *(++p)); // 输出 自右向左 ++p 等于 &a[2]
return 0;
}
2012-04-10 16:49
jianyuling00
来 自:琼州学院
等 级:
论坛游侠
帖 子:89
专家分:177
注 册:2012-3-17
第
6
楼
得分:0
我不太懂,但也知道没一个讲对的
2012-04-11 20:31
新手菜鸟鸟
等 级:
论坛游民
帖 子:37
专家分:57
注 册:2012-1-15
第
7
楼
得分:5
5楼正解!
2012-04-11 20:52
ming_wl
等 级:
论坛游民
帖 子:6
专家分:28
注 册:2012-4-9
第
8
楼
得分:0
这个也跟编译环境有关吧
有的是从右往左 有的也不一定
搞不清楚
2012-04-11 21:38
waterstar
等 级:
小飞侠
威 望:
5
帖 子:984
专家分:2810
注 册:2010-2-12
第
9
楼
得分:5
首先, *(p++) += 123;这句运行之后,p就指向了a[1]了。
printf("%d, %d\n", *p, *(++p));执行的时候,由于++是前置的,并且++p是printf的第三个参数,根据c标准的调用规则,++p这句会被首先执行,并将p指向值压栈,就得出了那结果。
冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2012-04-11 21:44
jqb
等 级:
新手上路
帖 子:3
专家分:0
注 册:2012-4-6
第
10
楼
得分:0
不太懂,有点怀疑结果
2012-04-11 21:47
15
1/2页
1
2
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-365504-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.126544 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved