数组小结

1、数组的声明要指出:存储类型,数组名,数组大小

2、没有引用数组,因为引用已经初始化不能在改变,但是可以有数组引用,即数组的引用,可以用于函数实参传递。

3、关于数组的初始化,若不显式提供元素,对于内置类型数组,在函数体外元素被初始化为0,而在函数体内则不被初始化。对于非内置类型,则不管在哪里定义,都会调用默认构造函数进行初始化,若没有默认构造函数则报错。

4、使用C风格字符串的标准库函数时,参数必须以’’结尾。

5、C/C++中,二维数组按照行优先存储。

6、一个N*M的二维数组a[x][y]转化为一维数组表示时,为b[x*M+y]

7、关于指针的运算,只有在同一个数组中的运算才有意义。

8、指针数组,是一个数组,装着指针。声明一个装有10个指针的数组int * a[10]

9、数组指针,是一个指针,指向数组。指向一个装有10个整型的数组的指针 int  (*p)[10],此时sizeof(p)40

10、二维数组的数组名是一个数组指针。int a[4][10]; int (*p)[10];p = a; sizeof(a)40

11、数组名为一个常量,不能对其赋值。

12、对于int a[10];&aint (*) [10],而aint *

13、如果指针指向文字常量区,不能通过指针对其进行修改。

14、对于数组int a[4][5]:

   a[0][0]   a[0][1]    a[0][2]   a[0][3]    a[0][4]

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

 

1a:类型为 int (*)[5],即a为指向数组a0个元素a[0]的地址,a等价于&a[0]&a+120个元素。

2*aa[0] 类型为int**a指向数组a[0]的首元素a[0][0]

3*(a+1)a[1] 类型为int *a类型为int(*)[5],a指向有5个元素的一维数组,故a+1跳过5个元素。

4*(*(a+1)+2) int型 ,指向的元素是a[1][2]

总结:

&a的类型为int(*)[5]

a+i的类型为int(*)[5]

*(a+i)int *;

*(*(a+i)+j)int;

*(a+i) = a[i];

*(*(a+i)+j)=*(a[i]+j)=a[i][j]

15、线性表的位序从1开始,而数组元素的下标从0开始。

原文地址:https://www.cnblogs.com/houjun/p/4905447.html