用的是64位的编译器,所以一个指针8字节
举例子
二维数组 == 数组指针 ------>空间连续
int a[2][3] = { {2,3,6},{20,40,60}} ; //定义了行为2,列为3的数组,sizeof(a) = 4*6 =24
//此时变量a就是一个数组指针
int(*b)[3]; //数组指针,一个指向3个数组的指针,在这里就是3列
//因为[]优先级大于* 所以要加括号表明这是一个 int指针
二级指针 == 指针数组 ------>空间不连续
int*c[2] //一个数组c里面 存放着两个int*指针 ,sizeof(c) = 2*8 =16字节
int** d //一个二级指针
我们对其赋值
int p[3] = { 2,4,6 };
int q[3] = { 1,3,5 };
int* c[2] = { p, q };
int** d = NULL;
d = c; // c可能是非连续的
for (int i = 0; i < 2; i++) {
for(int j = 0; j < 3; j++) {
printf("d[%d][%d]=%d\r\n", i, j, *(d[i] + j));
}
}
附加 数组的特性
int a[10] = {0};
// a 数组名 也是 数组首元素的地址 是个常量
// 变量的本质是内存空间的别名,一定义数组就会分配内存,内存就固定了,所以数组名起名就不能更改了
// &a 数组地址
// 数组首元素地址和数组数组地址相等
附加 数组作函数参数的特性 —> 为啥我传了数组进函数 不能sizeof数组大小啊
在函数里 把数组作为函数参数传入 不能 sizeof 数组的大小
因为 编译器在自动优化函数参数
// 一维数组
//编译器优化 int a[10] => int a[] => int *a
void find_arry(int a[10]); //垃圾写法
void find_arry(int *a); //正确写法
//二维数组
//编译器优化 int a[10][30] => int a[][30] => int (*a)[30] 最后变成数组指针啦
void find_arry(int a[10][40]); //垃圾写法
void find_arry(int (*a)[40]); //正确写法