首页 > 解决方案 > "int* p=+s;" 是什么意思?做?

问题描述

我在这里看到了一种奇怪的程序。

int main()
{
    int s[]={3,6,9,12,18};
    int* p=+s;
}

上面的程序在GCCClang编译器上进行了测试,并且在两个编译器上都可以正常工作。

我很想知道,有什么作用int* p=+s;

数组是否s衰减为指针类型?

标签: c++arrayspointersunary-operator

解决方案


内置operator+可以将指针类型作为其操作数,因此将数组传递s给它会导致数组到指针的转换,然后int*返回指针。这意味着您可以+s单独使用来获取指针。(对于这种情况,它是多余的;没有operator+它也会衰减到指针,然后分配给p.)

(强调我的)

内置的一元加号运算符返回其操作数的值。它不是空操作的唯一情况是当操作数具有整数类型或无作用域枚举类型时,通过整数提升来更改,例如,它将 char 转换为 int 或者如果操作数受制于左值到右值,数组到指针,或函数到指针的转换。


推荐阅读