【问题标题】:Why can a pointer not point to post increment but can do that to pre increment?为什么指针不能指向后增量但可以指向前增量?
【发布时间】:2017-12-10 10:48:45
【问题描述】:
#include<iostream>
using namespace std;
int main()
{

    int x=7;
    int *p=&x;
    int *p1=&++x;
    int *p2=&x++;
    int *p3=&(++x);
    int *p4=&(x++);
    cout<<p<<endl<<p1<<endl<<p2<<endl<<p3<<endl<<p4<<endl<<*p<<endl<<*p++<<endl<<*++p<<endl<<*(p++)<<endl<<*(++p)<<endl;
    return 0;
}

p2 和 p4 返回错误。另外,您能否解释一下我在 cout 语句中打印的指针 p 的所有增量的取消引用?

【问题讨论】:

标签: c++ pointers


【解决方案1】:

这里的问题不是指针。这是获取变量地址的动作(在赋值操作的 RHS 上)。

运算符&amp; 只能用于lvalues。后自增变量时,表达式的值为rvalue,不符合获取地址的条件。

来自 CppReference 的参考(以上链接):

左值

  • ++a--a,内置的预增和预减表达式;

prvalue

  • a++a--,内置的后自增和后自减表达式;

以下:

左值

属性:

  • 可以采用左值的地址:&amp;++i&amp;std::endl 是有效的表达式。

右值

  • 不能采用右值的地址:&amp;int()&amp;i++&amp;42&amp;std::move(x) 无效

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    相关资源
    最近更新 更多