-
数组名的值是一个指针常量,也就是数组第1个元素的地址。
声明一个数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,他的值是一个常量,指向这段空间的起始位置。
它的类型取决于数组元素的类型,即指向类型的常量指针
-
但是数组和指针是不一样的,指针仍然是一个标量,是个单一的值,只有当数组名在表达式中使用时,编译器才会为它产生一个指针常量。
-
数组名,即指针常量是不能修改的,程序运行后,数组在内存的位置就是固定的。
-
取一个数组名的地址所产生的是一个指向数组的指针
例
int a[10];
int b[10];
int *c;
...
c = &a[0] 等价于 c = a c是指向数组第1个元素的指针变量
b = a 这个表达式是非法的,不能使用赋值符来复制一个数组的所有元素到
另外一个新的数组,必须用循环来,每次循环复制1个元素
a = c 这个表达式也是非法的,因为前面提到,数组名在表达式中是一个指
针常量,是不能修改的。
-
当你根据某个固定数目的增量在一个数组中移动时,使用指针变量将比使用下标产生效率更高的代码。
-
作为函数参数的数组名,传给函数的是一份该指针的拷贝,函数如果执行了下标引用,实际上是对这个指针执行间接访问操作,而作为调用程序所传递的实参,即指针本身不会被修改。