*ptr=3;a=(*ptr)++; 为什么a=4啊?????
答案:3 悬赏:70 手机版
解决时间 2021-04-11 07:50
- 提问者网友:了了无期
- 2021-04-11 04:50
*ptr=3;a=(*ptr)++; 为什么a=4啊?????
最佳答案
- 五星知识达人网友:未来江山和你
- 2021-04-11 05:07
这个在不同的编译器上结果不同
我在三个在线编译器上测试了下列代码
int a = 0, *pt;
pt = &a;
*pt = 3;
a = (*pt)++;
printf("%d", a);
结果为3
但是在我自己电脑上的编译器Microsoft Visual C++ 2010 Express
运行结果却是4
(因为按理来说a=(*pt)++和a=a++是等价的 无论运行多少次a的值是不变的)
你说的这道题是计算机二级选择题的一道真题
有一个很奇怪的现象,我再次在Microsoft Visual C++ 2010 Express上测试了
int a = 0;
a = a++;
a = a++;
printf("%d", a);
结果是2
但是我在三个在线编译器的运行结果都是0,群里有人帮用gcc 7.3.0跑了一下代码结果也是0,
按优先级、结合性来解释结果应该是0
综上:Microsoft Visual C++ 2010 Express的锅(这样的代码少写)
考二级C的朋友只能硬记了,二级C的编译器就是Microsoft Visual C++ 2010 Express
我在三个在线编译器上测试了下列代码
int a = 0, *pt;
pt = &a;
*pt = 3;
a = (*pt)++;
printf("%d", a);
结果为3
但是在我自己电脑上的编译器Microsoft Visual C++ 2010 Express
运行结果却是4
(因为按理来说a=(*pt)++和a=a++是等价的 无论运行多少次a的值是不变的)
你说的这道题是计算机二级选择题的一道真题
有一个很奇怪的现象,我再次在Microsoft Visual C++ 2010 Express上测试了
int a = 0;
a = a++;
a = a++;
printf("%d", a);
结果是2
但是我在三个在线编译器的运行结果都是0,群里有人帮用gcc 7.3.0跑了一下代码结果也是0,
按优先级、结合性来解释结果应该是0
综上:Microsoft Visual C++ 2010 Express的锅(这样的代码少写)
考二级C的朋友只能硬记了,二级C的编译器就是Microsoft Visual C++ 2010 Express
全部回答
- 1楼网友:长青诗
- 2021-04-11 07:10
因为++运算符的优先级比赋值=高,先取*ptr的值为3,然后++变成4,最后在赋给a,所以a=4
- 2楼网友:笑迎怀羞
- 2021-04-11 05:39
*ptr=a[0][0]=1
*(ptr+2)=a[0][2]=3;
*(ptr+4)=a[1][1]=5
最后结果是15,不是24。我已经跑过一遍,不会错的。
ptr是整个数组的首地址,那么*ptr=a[0][0]是无可争议滴!,接着ptr+2,很明显是a[0][2]的地址,因为二维数组在存储的时候是线性存储的,不存在二维,仅仅是逻辑上的二维而已,那么ptr+4其实就是从a[0][0]之后数四个数,那么就得到其是a[1][1]的地址,即是5的地址。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯