数组读书笔记

来源:互联网 发布:移动crm软件作用 编辑:程序博客网 时间:2024/05/16 19:51
(注:下标的引用优先级高于间接访问)
1:数组名的值是一个指针常量,也就是数组第一个元素的地址,只有当数组名在表达式中使用时,编译器才会为它产生一个指针常量。
2:不能用赋值符把一个数组中的所有元素复制到另一个数组,只能通过循环来实现。
3:C的下标引用和间接访问时一样的。
例如:    int *ap=arr;
              *(ap+2)<====>ap[2];
4:   ap[-1]  ====>*(ap-1)   
5:   int arry[10]    2[arry]=*(2+arry).
6:  当你根据某个固定数目的增量在一个数组中移动时,使用指针比使用数组效率更高(指针中增量是1,并且机器具有地址自动增量模型)。
7:声明为寄存器变量的指针比位于静态内存和堆栈中指针的效率更高。


8:多维数组的理解
eg:   int arr[6][10]  ======>c是一个包含6个元素的数组,其中它的每个元素又是一个包含了10个元素的数组。
9:多维数组的存储顺序(线性存储)
按照右边下标率先变化的原则,称为行主序
10:指向数组的指针
eg:   int vector[10],  *vp=vector;   √(vector和vp具有相同的类型,所以合法)
        int matrix[3][10],    *mp=matrix;   ×(matrix并不是一个指向整形的指针,而是一个指向整形数组的指针)
正确的声明方式:   int (*mp)[10]=matrix;   (使mp指向matrix的第一行);
11:如果想逐个访问matrix中的元素而不是逐行访问,有以下两种声明方式;
eg:   int *mp=&matrix[0][0];
        int *mp=matrix[0];
12:作为函数参数的多维数组
  由于多维数组名指的是另外一个数组,编译器需要知道它的维数,所以有以下两种方式进行声明:
    int    func( int (*mp)[10] );
    int    func( int mat[ ][10] );
13:指针数组
     int *api[10];
14:总结
a:当我们声明了一个数组时,它同时也分配了一些内存空间,用于容纳数组元素,而声明一个指针时,它只分配了用于容纳指针本省的空间。
0 0