c - 数组索引方法一个棘手的案例

标签 c arrays pointers

#include<stdio.h>
int main() {
int buff[] = {1,2,3,4,5,6,9,10};
char c = (buff+1)[5];
printf("%d\n",c);//output is 9
return 0;
}

谁能解释清楚这是怎么发生的,为什么会发生

最佳答案

召回:

在 C 语言中,方括号 [ ] 是隐式的 *( ... )


您提供的代码片段中发生的是不明显的指针算法。这一行:

char c = (buff+1)[5];

...等同于以下内容(按照 C 标准):

char c = *( ( buff + 1 ) + 5 );

... 指向数组中的第 7 个元素(第 6 个位置)并取消引用它。它应该输出 9,而不是 19。

备注:

在关于方括号的注释之后,重要的是要看到以下内容是等价的。

arr[ n ] <=> n[ arr ]

... 其中 arr 是一个数组,n 是一个数值。一个更复杂的例子:

' '[ "]; i < 0; i++; while ( 1 ); do something awesome (y)." ];

...完全有效的指针算法。

关于c - 数组索引方法一个棘手的案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18165630/

相关文章:

c - 如何在 C 中分配和声明结构数组的 3D?

c - 如何访问由双指针表示的二维数组的元素作为 C 中的一维数组

Java Generic Primitive 类型 n-d 数组

c++ - 堆栈数组变量损坏

c - 将 Gtk Widgets 结构传递给回调函数

c - 单元格中的 GTK 组合框

php - 解析 json 并通过 PHP 为 NULL 行更新 NULL

c++ - 如何让这个音频延迟工作?

c - 在我下面的代码中,为什么 ptr[0] 的值和地址相同。 ptr[1] 和 ptr[2] 的行为相同

c - C 中的指针和递归函数