数组,简单的概念,无序的元素序列。创建一个数组就是在内存里面开辟一块连续的空间.二维数组依旧.
数组名是数组的首地址,这就是它的定义,也就是它的本质,因此不能说数组名是一个指针,简单来说sizeof操作就可看出两者不一样。不过数组名可以通过指针来转换到是.
指针数组和数组指针
一种说法而已,简单点
int *a[4]; //指针数组a里面有4个元素,每个元素都是int *类型的指针
int (*p)[4]; //数组指针p,指向一个长度为4的一维数组
int c[3][4]={}; //定义一二位数组
p = c;
/*
c:二维数组名
c[1]:一维数组名,sizeof求值为一维数组的大小,4*int占字节数
c+1:指针,sizeof求值为sizeof(指针),64位为8,32位为4
p:数组指针,指向一维数组的指针变量,值为&c[0][0],可以执行p++操作等
p+1:指向下一行 一维数组,即&c[1][0].
p[1][2]:同*(*(p+1)+2),c[1][2]
*p+1:指向p[0][1]
*/
二维数组
必须定义列数:比如
int a[][] = {1,2,3,4}; //错误用法
int a[][2] = {1,2,3,4}; //正确
无法获取列数如何让数组元素分配,行数不确定的话毕竟可以通过数组元素个数确定.
作为函数参数进行传递时,可用上面提到的数组指针。或直接使用数组
int func(int a[][3]);
int func(int (*a)[3]);
数组名
数组名本身就类似指针.
int a[] = {1,2,3,4,5};
假设a地址为0x0000,那么a+1为0x0004,&a+1为0x0014