数组名是什么类型?
数组名的值是一个指针常量,也就是数组第一个元素的地址。它的类型取决于数组元素的类型,如果它们是int类型,那么数组名的类型就是“指向int的常量指针”。
数组名一定是个指针常量吗?
只有在两种场合下,数组名并不用指针常量来表示---就是当数组名作为sizeof操作符或单目操作符&的操作数时。sizeof返回整个数组的长度,而不是指向数组的指针长度。取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个常量值的指针。
下标与指针表达式可以互换吗?
下标与指针表达式在数组的表示中可以互换使用,可读性方面,下标有优势,但有时指针运行的更有效率【原因见P144】.
数组与指针相等吗?
不等。联系是都具有指针值,都可以进行间接访问和下标引用操作。不同的是声明一个数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,它的值是一个常量,指向这段空间的起始地址。而声名一个指针变量时,编译器只为指针本身保留内存空间,它并不为任何整型值分配内存空间。
字符数组的初始化eg: char message1[] = "Hello";
char *message2 = "Hello";
message1为字符数组,message2为字符串常量。
二维数组的指针如何初始化?
eg: int matrix[3][10] ; int (*p)[10] = matrix;
p是一个指向拥有10个整型元素数组的指针。
如何传递作为函数参数的二维数组?
eg: int matrix[3][10]; func(matrix);
func函数定义:void func(int (*mat)[10]);或void func(int mat[][10]);