我正在使用带有 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)
哪里,并且是偏移量。因此,和是等价的。a
b
a[b]
b[a]
下面的行表示 arr 是 int 类型数组,它的大小为 1,它用 10 初始化,即索引 0 有 10
int arr[1] = {10};
然后下一行 printf 语句在索引 0 处打印 arr 的值。
printf("\n%d\n\n",0[arr]);