是指针数组吗?

Lui*_*ger 2 c c++ arrays pointers

这是我无法理解的代码:

char* myPtr = "example";
myPtr[1] = 'x';
Run Code Online (Sandbox Code Playgroud)

我如何被允许使用myPtr[1]?为什么我可以选择像数组一样的位置?myPtr甚至不是一个阵列.

OBS.我知道查找表,文字池和字符串文字,我关心的是这甚至编译.我没有那么多使用指针.

有人可以帮忙吗?

AnT*_*AnT 10

显然你假设[]运算符对某事物的适用性必然意味着"某事"是一个数组.这不是真的.内置[]运算符与数组没有直接关系.的[]仅仅是组合的简写*+操作符:定义a[b]装置*(a + b),其中需要一个操作数是一个指针和另一个要求是整数.

此外,当您将[]运算符应用于实际数组时,该数组首先被隐式转换为指针类型,然后结果指针才能充当运算[]符的操作数.这实际上意味着与您最初假定的相反:运算符[] 从不使用数组.到我们到达时,[]数组已经衰减为指针.

作为一个相关的附注,后一个细节表现在第一个C语言标准的一个模糊的特点.在C89/90中,rvalue数组不允许进行数组到指针的转换,这也阻止了[]运算符使用这样的数组

struct S { int a[10]; };

struct S foo(void) { struct S s = { 0 }; return s; }

int main() 
{
  foo().a[5]; 
  /* ERROR: cannot convert array to pointer, and therefore cannot use [] */

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

C99扩展了该转换的适用性,从而使上述代码有效.