C语言系列3——数组、字符串、I/O函数、运算符、表达式和语句

本文是C语言系列教程的第三部分,详细介绍了数组的概念、初始化和赋值,包括一维数组和多维数组。同时讲解了字符串的基础知识,如字符串简介、符号常量、const限定符以及常用的字符串函数。此外,还探讨了输入输出函数printf()和scanf()的使用,以及C语言中的各种运算符。
摘要由CSDN通过智能技术生成

1. 数组

  上一篇中,介绍了C语言的基本数据类型以及数字、单个字符怎么存储在计算机中,但这显然不够,比如说怎么在计算中存储自己的名字或者各科成绩等。因此,本节介绍一种能够高效便捷地处理这种数据的方法——数组(array)。

1.1. 数组的概念

  数组是按顺序存储的一系列类型相同的值,数组有一个数组名,并在声明时就要告诉编译器数组内包含多少个元素和这些元素的类型。编译器根据这些信息正确的创建数组,普通变量可以使用的类型,数组都可以使用。例如有如下的声明:

/*一些数组声明*/
int main(void)
{
   
	float candy[365];//内含365个float类型元素的数组
	char code[12];//内含12个char类型元素的数组
	int boo[4];//内含4个int类型元素的数组
	...
}

candy、code、boo是数组名,方括号表示它们是数组,方括号里面的数字表明数组中可存储的元素个数,是一个整型常量。数组中元素的编号从0开始,可以通过数组下标(也称索引)来访问数组元素,比如boo[0]表示boo数组中第1个元素。数组的元素被依次存储在内存中相邻的位置,如下图:

  在C99中,新增了变长数组(variable length array,VLA),在C11中,VLA是一个可选特性。变长数组是指在创建数组时,可以用变量来指定数组的维度,而不是说可以修改已创建数组的大小。比如

int quarters=4;
double name[quarters];//创建了一个变长数组

变长数组有一些限制:必须是自动存储类别,不能使用static、extern存储类型说明符(后面介绍),不能在声明时初始化。

1.2. 数组的初始化和赋值

  在使用数组前,必须先初始化,一般在声明是就应该初始化数组,对其初始化有三种情况:

  1. 未初始化,这时数组中存储的是垃圾值,没有任何意义;
  2. 完全初始化,对每一个元素都赋初始值。初始化方法:用逗号分隔的值列表(用花括号括起来),在逗号和值之间可以使用空格。如
int days[12]={
   31,28,31,30,31,30,31,31,30,31,30,31};
  1. 初始化一部分数组。初始化列表中的项数与数组大小不一致,如
int days[12]={
   31,28};

   那么数组的前两个元素会被初始化为31和28,其余的元素会被初始化为0。
补充3点:

  1. 如果初始化时省略了方括号中的数字,那么编译器会根据初始化列表中的项数来确定数组大小;
  2. 如果初始化列表中的项数多于数组元素,编译器会报错,但是奇怪的是如果声明一个数组,如int days[12];,然后给不存在的元素赋值:days[20]=0;反而不会报错。这是一个潜在的陷阱,因为C编译器不会检查数组下标是否正确(也体现了C相信程序员的特性),这在运行程序时,会导致数据被放在已被其它数据占用的地方,可能导致程序异常,所以在使用数组时,要防止数组下标超出边界;
  3. 在传统的C中,要初始化某一项元素,必须初始化该元素之前的所有元素。C99新增了指定初始化器(designated initializer),利用该特性可以初始化指定的数组元素,其余的元素被初始化为0。例如
int days[12]={
    [1] = 28};//把days[1]初始化为28

  在声明数组后,可以通过下标(或索引)对数组元素赋值。如days[5]=30;

1.3. 多维数组

  上面介绍的是一维数组,现在假设我想存储近3天的早中晚温度,一种方法是建立3个数组,每个数组三个元素,但是这样显然比较麻烦,这时就可以使用数组的数组,即建立一个二维数组。主数组有3个元素(每个元素表示1天),每个元素是包含3个元素的数组。声明如下:

float tem[3][3];//内含3个元素的数组,每个数组元素包含3个float类型的元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值