首页 > 试题广场 >

在 VS编译器以下程序的输出结果是?

[填空题]
在 VS编译器以下程序的输出结果是1
char s[] = "123", *p; 
p = s; 
printf("%c\n", *p++);
答案是1,因为*p++实际上就是*(p++),然而p++是后置++,它先返回p的拷贝给*,解引用之后,p再自己++。
发表于 2015-12-30 12:36:41 回复(0)
 
看图
发表于 2015-10-21 16:58:52 回复(1)
*p++ == *(p++)
p++返回p,再++
*p == 1
发表于 2016-09-25 21:09:59 回复(0)
*p++,这里清楚‘ * ’ 和‘ ++ ’的运算符的优先级,++ 高于 *,*p++ == *(p++)。
如果后++是一条语句则和前置++是相同的。如果是在一条输入语句中,则返回保存的副本。
这里的输出为1。

编辑于 2016-08-01 09:59:26 回复(0)
*p++等同于*(p++),先取*p的值输出,然后对p进行++,所以最后输出结果为1
编辑于 2015-10-09 00:57:08 回复(3)
主要是考察printf函数的输出顺序
发表于 2015-08-18 10:29:34 回复(0)
其中还有个知识点,很多人容易搞错:
char s[] = "123", *p = s;
// 输出为123
cout << p << endl;
// 输出为1
cout << *p << endl;

发表于 2016-12-03 20:56:55 回复(1)
先要注意后置++优先级为1,前置++和*优先级为2,所以*p++为*(p++),等于返回*p后p再自增
发表于 2017-09-29 13:15:42 回复(0)
哇,一不小心就错了,写成了123
*p应该是1
真是粗心(说到底就是不够熟练)
发表于 2017-06-12 00:59:03 回复(0)
后置++ --优先级高于解引用*,前置++ -- 优先级与解引用*相同。
发表于 2017-04-19 18:01:52 回复(0)
这个是少打了一个回车?
发表于 2017-03-20 15:39:48 回复(0)
这题***了,*是先结合,但是是后加。
发表于 2017-03-15 12:58:49 回复(0)
p++先操作,但是返回的是p的副本,解引用后还是*p的值
发表于 2017-03-01 15:37:30 回复(0)
p++,这里清楚‘ * ’ 和‘ ++ ’的运算符的优先级,++ 高于 *,*p++ == *(p++)
发表于 2016-10-11 16:07:56 回复(0)
这里的*p++相当于*(p++)后自增运算符;p先*运算之后再++(地址加加),
发表于 2016-09-01 09:41:14 回复(0)
这里输出的是单个的字符,所以输出*p对应的1
发表于 2016-08-28 15:53:15 回复(0)
*和++的优先级不是同一级的吗?为什么说++的优先级高于*?
发表于 2016-08-24 16:51:31 回复(0)
是先对p进行++,只不过返回的是p之前的副本。再对p之前的副本取*p,所以还是原来的1。
发表于 2016-07-22 22:12:49 回复(0)
看了一下大家的解析,为什么结果会出现三个数呢?我用的vs2013的编译器,结果是1,想不明白,希望大家指点一下
发表于 2015-10-26 12:28:20 回复(0)