数组和指针

数组和指针并不是相等的。为了说明这个概念,请考虑下面这两个声明:

int    a[5];
int    *b;
a和b能够互换使用吗?它们都具有指针值,它们都可以进行间接访问和下标引用操作。但是,它们还是存在相当大的区别。
声明一个数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,它的值是一个常量,指向这段空间的起始位置。声明一个指针变量时,编译器只为指针本身保留内存空间,它并不为任何整型值分配内存空间。而且,指针变量并未被初始化为指向任何现有的内存空间,如果它是一个自动变量,它甚至根本不会被初始化。
因此,上述声明之后,表达式 *a 是完全合法的, 但表达式 *b 却是非法的。*b 将访问内存中某个不确定的位置,或者导致程序终止。另一方面,表达式 b++ 可以通过编译,但 a++ 却不行,因为 a 的值是个常量。
posted @ 2013-11-14 00:02  hailπ  阅读(268)  评论(0编辑  收藏  举报