我正在使用带有 GCC 编译器的 Ubuntu 12.04lts。这个程序给出的结果是 10。请你描述一下为什么这个程序给出这样的结果?
#include <stdio.h>
void main(void)
{
int arr[1] = {10};
printf("\n%d\n\n", 0[arr]);
}
arr[0]在内部扩展为*(arr+0). 类似地0[arr]被扩展为*(0+arr)指向同一事物。因此,您看到 10。
通常对于数组或指针a,a[b]总是表示数组或指针的起始地址在*(a+b)哪里,并且是偏移量。因此,和是等价的。aba[b]b[a]
下面的行表示 arr 是 int 类型数组,它的大小为 1,它用 10 初始化,即索引 0 有 10
int arr[1] = {10};
然后下一行 printf 语句在索引 0 处打印 arr 的值。
printf("\n%d\n\n",0[arr]);