指向数组转换的指针

时间:2014-09-21 07:44:21

标签: c++ arrays pointers

8.3.4 / 8 N3797:

  

[实施例:

     

考虑int x[3][5];

     

这里x是一个3×5的整数数组。   当x出现在表达式中时,它将转换为指向(   三个中的第一个)五元数组的整数。在表达中   x[i]等同于*(x+i)x首先转换为指针   如上所述; 然后将x+i转换为x 的类型,其中涉及   将i乘以指针所指向的对象的长度,   即五个整数对象[...]

由于x的类型是“包含5个整数的3个数组的数组”,我们也有x + i。假设i = 2;

转换为5个整数的3个数组的数组后,x + i(调用他arr)元素的值是多少?我的意思是arr[3]等于什么?

1 个答案:

答案 0 :(得分:0)

arr[3]是一个包含五个整数的数组。原因如下:

  

当x出现在表达式中时,它会转换为指向(   三个中的第一个)五元数组的整数

这意味着在表达式中使用arr会导致类型int(*)[5](腐朽)。

对于x[3],相当于*(x+i),您首先将x翻译为int(*)[5]类型并推进,然后取消引用(请记住*)该指针因此得到类型int[5]

不幸的是,指针指向无效的内存点,因此对此五个整数数组的任何操作都是未定义的行为/访问冲突。

我同意这篇文章对此并不清楚,似乎这两个句子是一个接一个的(有点模糊不清)。

我会把它改为:

  

这里x是3×5的整数数组。当x出现在表达式中时   它被转换为指向(三个中的第一个)五元的指针   整数数组。在表达式x [i]中相当于   *(x + i),x首先被转换为如上所述的指针;在指针递增x + i之后(以字节方式将i乘以长度)   指针指向的对象,即五个整数对象),x + 1将转换为x指向的类型   [...]