c++中数组索引的类型

Type of array index in C++

本文关键字:类型 索引 数组 c++      更新时间:2023-10-16

c++编程语言中数组索引的类型是什么?例如在这样的语句中:

int tab[5];

转换为什么类型5 ?或者它只是普通的整型?

在这段代码中,5只是一个普通的整数字面值,所以这里只是一个普通的int

§8.3.4 Arrays在n3290 (~ c++ 11)中指定数组声明符:

在声明T D中,其中D的形式为

D1 [ constant-expressionopt ] attribute-specifier-seqopt

且声明T D1中标识符的类型为"derived-declarator-type-list T",则D中标识符的类型为数组类型;如果D的标识符的类型包含自动类型说明符,则程序是病态的。T称为数组元素类型;此类型不能是引用类型、(可能限定了cv的)void类型、函数类型或抽象类类型。如果存在常量表达式(5.19),必须是整型常量表达式,且其值必须大于0

§5.2.1 下标描述了表达式中括号中可以包含的内容:

后缀表达式后跟方括号中的表达式是后缀表达式。其中一个表达式的类型应为"指向T的指针",另一个表达式的类型应为无作用域枚举或整型。结果是类型为"t"的左值。类型"T"应该是完全定义的对象类型。表达式E1[E2]等于(根据定义)*((E1)+(E2))

这个问题有点令人困惑。标题提到数组索引类型,但在问题中,您似乎问了其他问题。你在问数组的大小吗?或者索引到数组?声明的数组的大小必须大于0 ;它可以是任意的整型:intcharsigned charunsigned int等。在你的问题中,文字5的类型是int

然而,如果你问数组索引的类型,那么它必须是整型之一。数组的索引类型也可以是int,因为它甚至可以是负的。

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]

int tab[5];是一个数组声明

数组声明接受值大于零的整型常量表达式 (c++11:§8.3.4)。

§5.19.4 (n3242):

如果常量表达式是of,则它是一个积分常量表达式整型或枚举类型。[注:这样的表达可以用作。数组边界(8.3.4,5.3.4),作为大小写表达式(6.4.2),作为位域长度(9.6),…


5是一个整数字面值(第2.14.2节)。类型为int

§2.14.2 (n3242)

2整数字面值的类型是第一个对应的

3整数字面值不能由其列表中的任何类型表示扩展整型(3.9.1)可以表示它的值,它可能有扩展的整数类型. ...

表6中不带后缀的十进制常量类型有:intlong intlong long int

这是int,如果你想要不同的类型使用后缀,例如:

5         // int
5u        // unsigned int
5l        // long
5ul       // unsigned long