C语言:数组和指针

数组(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为二级指针;

指向指针的指针

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200609A00CYV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券