标准转换:数组到指针的转换

4 c++ arrays

这是ISO的标准:标准转换:数组到指针的转换:$ 4.2.1

可以将"数组NT"或"未知T的数组"的左值或右值转换为"指向T的指针"的右值.结果是指向数组的第一个元素的指针.

任何人都可以通过示例程序解释这个问题.

我已经看过这些链接,但我无法理解:

数组和右值

我想我可能想出了一个rvalue数组类型的例子

Jam*_*lis 11

在C和C++中,可以使用数组,就好像它是指向其第一个元素的指针一样.实际上,给定一个名为的数组x,您可以&x[0]用just 替换大多数用法x.

这就是订阅如何与数组对象一起使用:

int x[5];
x[2];     // this is the same as (&x[0])[2]
Run Code Online (Sandbox Code Playgroud)

这也是如何将数组传递给具有指针类型参数的函数:

void f(int* p);

int x[5];
f(x);     // this is the same as f(&x[0])
Run Code Online (Sandbox Code Playgroud)

有几种情况下不会发生数组到指针的转换.示例包括当数组是操作数sizeof或一元&操作符(运算符的地址)时,使用字符串文字初始化数组时,以及数组绑定到数组的引用时.

  • x [2]与*(&x [0] + 2)相同; 你的意思是x + 2与&x [0] + 2相同吗?在&x [0](也是下标)方面定义下标存在问题. (4认同)
  • @Fred:呃,那真的很糟糕;感谢您指出。我的意思实际上是 `(&x[0])[2]`,因为我试图展示 `x` 和 `&x[0]` 之间的等价性。不过,您的示例也可以。 (2认同)