C++编程语言中的数组索引类型是什么?例如,在以下语句中:
int tab[5];
数字5会被转换成什么类型?还是只是普通的整型(int)?
C++编程语言中的数组索引类型是什么?例如,在以下语句中:
int tab[5];
数字5会被转换成什么类型?还是只是普通的整型(int)?
5
是一个普通的整数字面值,因此它在这里只是一个普通的 int
。In a declaration T D where D has the form
D1 [ constant-expressionopt ] attribute-specifier-seqopt
and the type of the identifier in the declaration T D1 is “derived-declarator-type-list T”, then the type of the identifier of D is an array type; if the type of the identifier of D contains the auto type-specifier, the program is ill-formed. T is called the array element type; this type shall not be a reference type, the (possibly cv-qualified) type void, a function type or an abstract class type. If the constant-expression (5.19) is present,it shall be an integral constant expression and its value shall be greater than zero.
§5.2.1 子脚本 描述了方括号中可以用于表达式的内容:
后缀表达式加上一个方括号内的表达式仍为后缀表达式。这两个表达式中的一个应该是“指向 T 的指针”,另一个应该是无作用域枚举类型或整数类型。结果为类型为“T”的左值。类型“T”应该是完全定义的对象类型。 表达式 E1[E2] 等同于 *((E1)+(E2))(根据定义)。
int a[10][10];
int x = a[3][-1]; //same as a[2][9]
int y = a[3][-2]; //same as a[2][8]
int z = a[3][-3]; //same as a[2][7]
a[0][0]
是非法的吗?我认为你把“数组的索引”和“数组的大小”混淆了。必须保证的是“大小”大于零! - Nawaznew int [0]
. - Johannes Schaub - litb5
。你说得对,我混淆了数组的索引和大小。 - jfsoperator[]
,则类型可以是任何东西。 - Nawazint tab[5];
是一个数组声明。
数组声明接受一个大于零的整型常量表达式(C++11:§8.3.4)。
如果常量表达式是整型或枚举类型,则它是整型常量表达式。【注:这样的表达式可用作数组边界(8.3.4,5.3.4),case表达式(6.4.2),位域长度(9.6),...】
5
是一个整型字面值(§2.14.2)。它的类型是int
。
2 整数字面值的类型是表6中相应列表中的第一个,其中其值可以表示。
3 如果一个整数字面值不能被其列表中的任何类型表示,并且扩展整数类型(3.9.1)可以表示其值,则它可以具有该扩展整数类型。...
表6中没有后缀的十进制常量的类型为:int
,long int
,long long int
。
如果你想使用不同的类型,请在后面加上相应的标识符,比如:
int
代表整数。
5 // int
5u // unsigned int
5l // long
5ul // unsigned long
int
、long int
、long long int
或者可能有扩展的整数类型。参见我的回答例如,5000000000
在我的机器上是 long
类型,在 ideone.com 上是 long long
类型。 - jfs