通常通过方括号访问数组值:
int val; int array[10]; /* Setting the value of the fifth element to 5: */ array[4] = 5; /* The above is equal to: */ *(array + 4) = 5; /* Reading the value of the fifth element: */ val = array[4];
由于操作数对+运算符是可交换的(->交换定律),因此以下等效:
*(array + 4) = 5; *(4 + array) = 5;
因此,下一条语句也等效:
array[4] = 5; 4[array] = 5; /* Weird but valid C ... */
以及这两个:
val = array[4]; val = 4[array]; /* Weird but valid C ... */
C不执行任何边界检查,访问已声明数组之外的内容是未定义的(访问已分配块之外的内存):
int val; int array[10]; array[4] = 5; /* ok */ val = array[4]; /* ok */ array[19] = 20; /* undefined behavior */ val = array[15]; /* undefined behavior */