第十章 数组和指针——《C Primer Plus》笔记

2023-02-18  本文已影响0人  One2INF

第十章 数组和指针

10.1 数组

用逗号分隔的值列表初始化数组。

int powers[8] = {1,2,4,6,8,16,32,64};

如果不初始化数组,数组元素是未知值;如果部分初始化数组,剩余元素初始化为 0

指定初始化器(designated initializer)

int days[12] = {31,28,[4]=31,30,31,[1]=29};

防止数组越界访问

10.2 多维数组

即数组的元素是数组的多重嵌套,最常用的是二维数组,最好不要超过三维。

10.3 指针和数组

数组名是数组首元素的地址,因此可以用数组名给指针赋值,用指针间接访问数组。

10.4 函数、数组和指针

int arr[] 形式只能用于函数的形式参数

10.5 指针操作

10.6 保护数组中的数据

对于编写处理数组的函数,只能通过传递指针的方式访问数组。而函数可以通过指针修改原始数组数据,因此要注意数据保护,不需要修改时可以对形式参数添加 const 修饰保护。

10.7 指针和多维数组

int zippo[4][2];

数组名是数组首元素的地址,zippo[4][2] 的首元素是大小为 2int 数组。

zippo:指向大小为 2int 数组的指针;

zippo[0]:指向 int 对象的指针;

把非 const 指针赋值给 const 指针没问题,前提是只进行一级解引用,一下程序演示 const int 被修改了

const int **pp2;
int *p1;
const int n = 13;
pp2 = &p1;
*pp2 = &n;
*p1 = 10;

10.8 变长数组(VLA)

指可以在创建数组时使用变量指定数组的大小。c99 支持,C11 作为一个可选项。建议不用。

10.9 复合字面量

字面量:除符号常量外的常量。

5int 类型字面量;

81.3double 类型字面量;

‘Y’char 类型字面量。

复合字面量:数组和结构的字面量。

(int [2]){10, 20} 是复合字面量

(int []){50, 20, 90} 是内含 3 个元素的复合字面量

上一篇 下一篇

猜你喜欢

热点阅读