C Primer Plus学习笔记(十)- 数组和指针

数组

数组由数据类型相同的同一系列元素组成

需要使用数组时,通过声明数组告诉编译器数组中内含多少元素和这些元素的类型

普通变量可以使用的类型,数组元素都可以用

float candy[365];  // 内含 365 个 float 类型元素的数组
char code[12];  // 内含 12 个 char 类型元素的数组
int states[50];  // 内含 50 个 int 类型元素的数组

方括号([])表明 candy、code 和 states 都是数组,方括号中的数字表明数组中的元素个数

要访问数组中的元素,通过使用数组下标数(也称为索引)表示数组中的各元素

数组元素的编号从 0 开始,所以 candy[0] 表示 candy 数组的第 1 个元素,candy[364] 表示第 365 个元素,也就是最后一个元素

初始化数组

只储存单个值的变量有时也称为标量变量(scalar variable)

int nums[8] = {1, 2, 3, 4, 5, 6, 7, 8};

用以逗号分隔的值列表(用花括号括起来)来初始化数组,各值之间用逗号分隔,逗号和值之间可以使用空格

根据上面的初始化,把 1 赋给数组的首元素(nums[0]),以此类推

不支持 ANSI 的编辑器会把这种形式的初始化识别为语法错误,在数组声明前加上关键字 static 可以解决此问题

使用 const 声明数组

用 const 声明和初始化数组的话,这个数组就是只读数组,程序在运行过程中不能修改数组中的内容

const int nums[8] = {1, 2, 3, 4, 5, 6, 7, 8};

和普通变量一样,应该使用声明来初始化 const 数据

如果初始化数组失败的话

#include <stdio.h>
#define SIZE 4

int main(void)
{
	int no_data[SIZE];  // 未初始化数组
	int i;

	printf("%2s%14s\n", "i", "no_data[i]");
	for (i = 0; i < SIZE; i++)
		printf("%2d%14d\n", i, no_data[i]);

	return 0;
}

运行结果

使用数组前必须先初始化它。与普通变量类似,在使用数组元素之前,必须先给它们赋初值

编译器使用的值是内存相应位置上的现有值,系统不同,输出的结果可能不同

初始化列表中的项数应与数组的大小一致

#include <stdio.h>
#define SIZE 4

int main(void)
{
	int some_data[SIZE] = {2, 4};
	int i;

	printf("%2s%14s\n", "i", "some_data[i]");
	for (i = 0; i < SIZE; i++)
		printf("%2d%14d\n", i, some_data[i]);

	return 0;
}

运行结果

当初始化列表中的值少于数组元素个数时,编译器会把剩余的元素都初始化为 0

如果不初始化数组,数组元素和未初始化的普通变量一样,其中储存的都是垃圾值;如果部分初始化数组,剩余的元素就会被初始化为 0

猜你喜欢

转载自www.cnblogs.com/sch01ar/p/9142685.html