数组索引方法是一个棘手的问题 #包括 int main(){ int buff[]={1,2,3,4,5,6,9,10}; 字符c=(buff+1)[5]; printf(“%d\n”,c);//输出为9 返回0; }
有人能解释清楚这是怎么发生的以及为什么发生的吗?回忆一下: 在C中,方括号数组索引方法是一个棘手的问题 #包括 int main(){ int buff[]={1,2,3,4,5,6,9,10}; 字符c=(buff+1)[5]; printf(“%d\n”,c);//输出为9 返回0; },c,arrays,pointers,C,Arrays,Pointers,有人能解释清楚这是怎么发生的以及为什么发生的吗?回忆一下: 在C中,方括号[]是隐式的*(…) 您提供的代码片段中发生的事情并不是显而易见的指针算法。这一行: #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标准): 。。。它指向数组中的第7个元素(第
[]
是隐式的*(…)
您提供的代码片段中发生的事情并不是显而易见的指针算法。这一行:
#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标准):
。。。它指向数组中的第7个元素(第6个位置)并取消对它的引用。它应该输出9,而不是19
备注:
按照关于方括号的说明,重要的是要看到以下内容是等效的
char c = *( ( buff + 1 ) + 5 );
。。。完全有效的指针运算。我想它一定是9。@Krishnasundar,为以后的指针运算的磨合添加了另一个重要的注释。好吧,如果两个加法算作“非常聪明”,那么我一定是理解乘法的真正天才…@H2CO3,这个问题的提出是聪明的(所以这并不明显)。我会修正我的措辞,使之泄气。
' '[ "]; i < 0; i++; while ( 1 ); do something awesome (y)." ];
arr[ n ] <=> n[ arr ]
' '[ "]; i < 0; i++; while ( 1 ); do something awesome (y)." ];
{1, 2, 3, 4, 5, 6, 9, 10};
| |
buff buff+1 = {2, 3, 4, 5, 6, 9, 10} (say buff_1)
|
buff_1[5] = 9