数组名是C ++中的常量指针吗?

时间:2010-02-28 15:42:58

标签: c++

我对数组名称

有疑问
int a[10]

如何在C ++中定义数组名称?常量指针?它是这样定义的还是我们可以这样看?可以对名称应用哪些操作?

2 个答案:

答案 0 :(得分:28)

C ++标准定义了数组是什么及其行为。看看索引。它不是指针,const或其他,它不是别的,它是一个数组。

看到差异:

int a[10];
int *const b = a;

std::cout << sizeof(a); // prints "40" on my machine.
std::cout << sizeof(b); // prints "4" on my machine.

显然a和b的类型不同,因为它们的大小不同。

在大多数情况下,数组名称“衰减”为指向其自身第一个元素的指针。您可以将其视为自动转换。结果是一个rvalue,意味着它只是一个指针值,并且无法分配,类似于函数名称衰减到函数指针时。并不意味着它是“常量”,但它不是可分配的。

所以数组“是”一个指针很像一个函数“是”一个函数指针,或一个长“是”一个int。也就是说,它并不是真的,但是由于转换,你可以在大多数情况下将它用作一个。

答案 1 :(得分:6)

数组名称不是一个常量指针 - 但它在很多情况下就像是一个(它几乎可以转换为一个),它在大多数情况下都是如此。

从6.3.2.1/3“其他操作数/左值,数组和函数指示符”:

  

除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则将转换类型为“array of array”的表达式到类型为“指向类型的指针”的表达式,它指向数组对象的初始元素,而不是左值。