定义一个数组a[5];
sizeof(a)= sizeof(int)*5;在32位系统下是20.
sizeof(a[0])的值是4;
按理说啊a[5]是越界的,但是sizeof(a[5])是合法的因为sizeof不是函数,而是关键字,关键字求值是在编译的时候,虽然并不存在a[5]这个元素,但是也并没有访问这个元素,而是仅仅根据这个元素的值去确定它的值所以这里a[5]并没有错。
这里顺便说一下首先是预编译:展开#开头的文件顺便说一下include""和include<>的区别,前者甘肃编译器去源程序所在目录里找,如果找不到再到默认路径里找,后者告诉你去系统默认的路径去寻找相关文件。
编译阶段:这要是检验代码语法错误,以及将c语言转化成汇编语言。
汇编阶段:将汇编代码编译成目标文件。最后就是链接程序喽。