首页 > 试题广场 >

执行下列语句后的结果为()。 int x=3,y;

[单选题]
执行下列语句后的结果为( )
int x = 3, y;
int *px = &x;
y = *px++;


  • x=3,y=4
  • x=3,y=3
  • x=4,y=4
  • x=3,y 不知
y=*px++;    *和++运算符级别是一样的,同级别至左向右,2个运算符都是操作的同一个变量 px。
所以运算过程为 *px , px++(指针往后移) , y = 3。x值没有被改变。
发表于 2018-09-01 23:29:24 回复(0)
更多回答
y = *px++;可看成 y = *px; px++;
发表于 2017-08-28 11:06:34 回复(5)
迭头像
虽然后置++优先级高于解引用,但这里主要是后置++是在表达式结束后自增。
发表于 2017-09-03 15:39:15 回复(4)
如果变成y=*++p,结果就是y不可知了。
其实二者区别在于++前置和后置的内部实现不同,前置返回的是自增后的引用,后置返回的是原来变量的一个副本。
发表于 2017-09-01 10:33:59 回复(1)

关键在于熟练掌握操作符的优先级和++的使用方法

  • 写法一
y=*px+1; //y=(*px)++

此处*为间接访问,px指向地址的内容+1后的值赋给y。

此时,x=4,y=3。

  • 写法二
y=*px++; //y=*(px++);

这里*(取值符)和++为同一优先级,px先和++结合;但会先使用px指向地址的内容并赋给y,之后px的值+1,只是改变了px指向的地址。

此时,x=3,y=3(这里大部分机器的结果 * px=3是因为系统给xy分配了相邻的地址,px+1指向的地址变成y的地址,如果xy的地址不相邻,则 * px的值不确定)。

两种写法 * px++和 * px+1的区别是后者是px指向地址的内容+1,前者是px指向的地址+1,所有后者、即单独的 * px++;等价于px++,是一种容易误解的写法,在实际程序中不会用到 * px++;这样的语句。

  • 写法三(扩展)
y=*++px;

类似,px先和++结合;这次会先让px指向的地址+1,之后把px指向地址的内容赋给y,当然这个值是不确定的(一般系统给xy分配的地址是相邻的,所以px指向的地址一般就是y的地址,也就是说y的内容并为改变)。
此时,x=3,y= ?。

编辑于 2021-09-28 11:03:30 回复(3)
优先级:++>*,但后自增运算符:先赋值,后自增
发表于 2019-03-04 15:59:14 回复(0)
int x=3,y;
int *px=&x;
y=*px++;

*px=&x; 把x地址赋值px; y=*px++; *px++ 是先取值,赋值给y,之后px再++。这样x的值不变,有的值是3
发表于 2019-08-12 00:20:50 回复(0)
++为后置时,优先级大于*
++为前置时,如果表达式还有*,则按照从右到左进行结合
发表于 2020-12-24 10:26:52 回复(0)
y = *px++,后++优先级高于*,应该先px++,后取值。但因为是后++,所以先执行*px,然后等赋值完成以后,执行px++,所以x的值不变。
发表于 2020-08-01 21:46:47 回复(0)
前置返回的是自增后的引用,后置返回的是原来变量的一个副本。
发表于 2020-12-19 10:07:29 回复(0)
指针+只是加了一个单位地址,其指向的值不改变 我是个新人,这只是个人观点,大佬们还请指点
发表于 2019-01-02 17:47:22 回复(0)
<p>*px指向的是x的值,也就是3,y=*px++,就是把x的值给了y,再把指针指向下一个地址,++是指针指向下一个地址,而不是自增的➕1</p>
发表于 2020-08-31 10:40:09 回复(0)
y=*p++,我可以这样理解++优先级高于*解引用运算符,但是++是先使用再自增,所以先取出*p的值赋给y然后p再++,指向下一个指针
发表于 2025-06-16 21:21:21 回复(0)
先执行++后执行*。因为是后增,在表达式中,px++仍然等于px等于3。最后y = *px = 3
发表于 2025-05-22 16:58:18 回复(0)
解引用*是无论++前缀还是后缀都优先级更高
发表于 2024-09-05 21:38:51 回复(0)
指针先指向x再赋值给y,最后加加
发表于 2022-06-14 09:33:48 回复(0)
如果是 y=(*px)++;  那么结果是  x =4 y = 3,  要考虑符号优先级以及后置++的特性。
发表于 2020-10-27 21:13:53 回复(0)
++优先级高于解引用
发表于 2019-11-20 16:38:44 回复(0)
后置自增操作符的优先级高于解引用操作符,但是要注意的是如果有返回的值,返回的对象是迭代器增加前指向的对象而不是增加后指向的对象,虽然后自增先执行。
发表于 2019-11-11 17:38:28 回复(0)
后++,先调用,后赋值,先++,先赋值,后调用。虽然这里++的运算符优先级高于取值运算符,但是*p是在被赋值后p才++,如果在前面的话,y就是未知了
发表于 2019-01-22 16:46:18 回复(0)