【C与指针】数组与指针的关系

数组名是什么类型?

    数组名的值是一个指针常量,也就是数组第一个元素的地址。它的类型取决于数组元素的类型,如果它们是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]);



你可能感兴趣的:(解题套路)