第十章 数组和指针
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]
的首元素是大小为 2
的 int
数组。
zippo:指向大小为 2
的 int
数组的指针;
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 复合字面量
字面量:除符号常量外的常量。
5
是int
类型字面量;
81.3
是double
类型字面量;
‘Y’
是char
类型字面量。
复合字面量:数组和结构的字面量。
(int [2]){10, 20}
是复合字面量
(int []){50, 20, 90}
是内含3
个元素的复合字面量
网友评论