C语言指针与数组

C语言数组下标[]符号竟是个语法糖?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

struct node {
int a[100];
int b[100];
};

int main() {
struct node ins;
int i = 0;
for(; i<200; i++) {
ins.a[i] = 1;
}
return 0;
}

问:上述程序在运行时是否会产生数组越限?

答:不会。

《C程序设计语言》(第2版·新版)P84写到:
对数组元素a[i]的引用也可以写成(a+i)这种形式,在计算数组元素a[i]的值时,C语言实际上先将其转换为(a+i)的形式,然后再进行求值。

如果你没注意到此特性,将有可能导致灾难。