一、二维数组
1、定义
类型说明符 数组名[常量表达式1][常量表达式2]
比如说定义一个三行四列的数组a: float a[3][4]
特点
一个数组中的元素类型是一维数组的一维数组,类似于数学中的矩阵
上述二维数组a
a[0]----a[0][0] a[0][1] a[0][2] a[0][3]
a[1]----a[1][0] a[1][1] a[1][2] a[1][3]
a[2]----a[2][0] a[2][1] a[2][2] a[2][3]
存储顺序
2、代码实现
#include <stdio.h>
int main(){
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf("%d\n", sizeof(a)); // 二维数组的大小
printf("%d\n", a[2][3]); // 最后一个元素
return 0;
}
3、调试看元素存放顺序
Debugger
在内存视图中可以看到,从1-12是按照顺序排放的,所以赋值时也可以依次赋值
说明内存视图是16进制
二、二级指针
1、定义
二级指针的作用是服务于一级指针变量,对一级指针变量实现间接访问
2、代码实现
#include <stdio.h>
int main(){
int i=10;
int *p=&i;
// 一级地址的指针变量给了二级指针
int **p2=&p;
printf("sizeof(p2)=%d\n",sizeof(p2));
printf("**p2=%d\n",**p2);
return 0;
}
3、原理解析
i=10;
假设`i`的地址是0x0001;
p=&i; p中存的值时`i`的地址,即p=0x0001;
假设p的地址是0x0002;
p2=&p; p2中存的值时`p`的地址,即p2=0x0002;
此时 `*p2` 拿到的值是`p`中存储的`i`的地址;
`**p2`拿到的才是`i`的值
~~