C和指针 6.7 指针、间接访问和左值

缘起

《C和指针》 6.7节

分析

1
2
int a = 10, *d = &a;
*d *= 10;

是合法的, 即 指针表达式可以作为左值.

但是下面的是非法的

1
2
int a = 10, *d =&a;
d = 10;

编译报错

1
error C2440: '=' : cannot convert from 'int' to 'int *'

因为两边的类型不一致而且无法转换.

注意,上面编译报错是在遵守ANSI C标准的C编译器下发出的. 但是在 KR C 这种旧式编译器中编译是通过的.