1、声明和定义:
声明相当于普通的声明:它所说明的并非自身,而是描述其他地方的创建的对象。
定义相当于特殊的声明:它为对象分配内存。
例如:定义:int my_array[100];
声明:extern int my_array[ ];指代其他地方定义的对象。(二维数组需要提供除最左边一维之外的其他维的长度)
2、X = Y;
1)符号X是X所代表的地址,符号Y是Y代表的地址的内容;
2)X是左值,Y是右值;
3)左值在编译时可知,左值表示储存结果的地方,右值直到运行时才知,右值表示“Y的内容”。
注:数组名是左值,但不是可修改的左值,标准规定赋值符必须用可修改的左值作为它左边一侧的操作数。
3、当“以指针方式引用”时:
char *p ="abcdefgh";
当书写了extern char *p,然后用 p[3] 来引用其中的元素时,编译器将会:
1)取得符号表中 p 的地址,提取存储于此处的指针。
2)把下标所表示的偏移量与指针相加,产生一个地址。
3)访问上面这个地址,取得字符。
编译器已被告知p 是一个指向字符的指针,(相反,数组定义告诉编译