我对数组名称
有疑问int a[10]
如何在C ++中定义数组名称?常量指针?它是这样定义的还是我们可以这样看?可以对名称应用哪些操作?
答案 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”的表达式到类型为“指向类型的指针”的表达式,它指向数组对象的初始元素,而不是左值。