数组(Array)
可以理解为相同类型数据的集合,数组的索引(index)从0开始,n个元素的数组索引从0~n-1,数组符号方括号([]),里面的数值定义了数组的元素个数。
下面是源码,一维数组、二维数组的定义和初始化(为了显示,打印格式进行了控制)。在内存中数组不管多少维都是线性存储的,内存地址是递增的。对于数组可以从几何的角度更好的理解,一维数组就是一条线,一行数据,每个元素都是一列,而二维数组是由一维数组构成的矩阵(长方形),每行都是一个一维数组,依次类推,那三维数组就可以看成是二维数组叠加而成的立方体,比如arr[5][6][7],由5个6行7列的二维数组叠加。
数组
源码运行结果,数组可以指定某个元素初始值,未指定默认为0(定义一个数组最好是初始化为了代码安全),注意提示需要加C99标准编译。
数组运行
指针(Pointer)
指针变量保存的是数据存储的地址。'*'间接引用,‘*’的优先级小于‘[]’。
截图C99标准
a是int类型,int a;
b是int类型指针,int *a;
c是指针数组,int *a[3],[]符号优先级高,先看a[3]是数组,int *整形指针;
d是数组指针,int (*a)[3],()符号优先级高,(*a)是指针,指向有三个元素的整形一维数组;
e是指向可变长度数组的指针,int (*a)[](其实和d一样,在二维数组可以当做行指针,一个累加就是一行);
f是没有参数说明的函数返回指向int的指针;
g是函数指针;
h是函数指针数组(const常量),每个指针都有一个unsigned int类型的参数,未指定参数数量(在声明不确定形参的时候可以使用‘...’代替,参照printf);
int *(*)()是函数指针,返回值是int指针;
如下图,指向指针的指针:int Data为数据变量,int *p_Data为指针,int **pp_Data为二级指针;
指向指针的指针
领取专属 10元无门槛券
私享最新 技术干货