在线急等,高分求教C++关于指针的基本问题

2025-06-23 01:33:01
推荐回答(4个)
回答1:

用GCC,这三个都不对。
也许指针不好理解,那换成int变量,这三个还是不对。

因为++无论前置后置,都要把结果送回操作的那个变量保存起来。

p ++ ,好理解,取p的值,增量值送回p,注意这个式子的结果是p的值。
(p++)代表什么?前面说了,它代表p那个类型的一个值,对这个东西,
你把它增量是可以的,但是你打算把新值送到哪里去?
所以这个表达式被C语言标准禁止了。能通过编译的,就是不符合规范的。

=================================
看了二楼答复,又去试了 ++++ p ; p ++++ ; 这五种表达式编译都是不通过。
一楼所说的关于左值的问题,手头没有关于左值的详细资料,不过应该是对的。

回答2:

++(p++)
(p++)后缀++操作符返回的是p的copy,且是const 类型的变量。const类型变量就不再支持前缀++。

(++p)++
(++p) 前缀++操作符返回的是p的引用。故可以继续调用++。

例如一下:
p++++是错误的。
++++p是正确的

回答3:

++p
这个需要一个左值,只有变量和看作指针的内存空间可以被看作是左值

解释过来就是
(p) = (p) + 1

而在++p++,++(p++)

解释过来是:
(p++) = (p++) + 1
左边是一个表达式了(p++)
因此不行

回答4:

我用gcc4.3编译,都是错误的。。。。

k.c:6: 错误: 自增操作数必须是左值 // ++p++
k.c:7: 错误: 自增操作数必须是左值 // ++(p++)
k.c:8: 错误: 自增操作数必须是左值 // (++p)++