第六章 数组与结构
数组(arr)
(1)概念:数组是类型相同 数目相同的连续存放的一组有序数的集合
例如:定义一个数组
# include <stdio.h>
void main
( //数目固定:10个元素,定义10个内存块
int a [10] = {0}; //每个内存块都是整型,连续存放,第一个元素a[0],最后一个元素a[9].
) //赋初值{0},所有元素都为0:当部分赋初值其他没有赋值的全为0;当一个都不赋值,那么所有元素都为乱值,
(2)数组名就是内存块的首地址,他是一个指针常量。
(3)定义数组时,数组长度一定是常量或者常量表达式,而在使用时可以是常量可以是变量
错误实例:{ int n=5;
int a[n] }
(4)a[i]是变量名称,表示a这个地址后,第i+1个内存块,a+n(整型数)表示a地址向右移动n个存储单元,得到一个新的地址,
;
一.一维数组
1.格式: 类型说明符 数组名 [常量表达式]
例如: int arr[1,2,3,4,5, 6]
格式说明:(1)数组中的每一个变量称为数组元素
(2)数组在内存中存储是占一段连续的存储空间
(3)一个数组名只能在程序中说明一次,
(4)常量表达式可以是整数常量、符号常量或常量表达式, 不能包含变量, 其值必须是正整数
2.数组的引用
(1) 格式: 数组名 [下标]
下标可以是整数,符号常量,变量或整型表达式,
下界<=下标<=上界 (下界=0,上界=整常量表达式-1)
(2)说明:对数组中所有元素逐个引用时, 通常使用循环结构,
3.一维数组在内存中的存储
数组定义以后, 编译器就会为这个数组在内存中分配一串连续的存储单元用于存放数组元素的值。数组名表示存储单元的首地址, 存储单元的多少由数组的类型和数组的大小决定。
一维数组总字节数=sizeof(类型)*数组长度,
4,初始化
(1) 给全部元素赋初值时可不以指定数组的长度
(2)如果数组长度与初始数据个数不相等, 在定义数组时不能省略数组长度。
(3)当对全部数组元素初始化为 0 时, 可以写成:int x[5]= {0, 0, 0, 0, 0}; 或: int x[5]= {0};
例: int a[ ]={0, 1, 2, 3, 4, 5, 6, 7};
(4)初值表不能为空
(5)没有初始化的数组, 其元素的值不确定。
二.二维数组
二维数组是由具有两个下标的数组元素组成。
1,.格式: 类型符 数组名[常量表达式1][常量表达式2];
2,引用格式: 数组名[行下标][列下标]
3.二维数组的初始化通常是按行进行赋值的
格式: 类型符 数组名[表达式1][表达式2]={初值表};
三种方式: 给全部元素赋初值
给部分元素赋初值
给全部元素赋初值时, 不指定第一维的长度, 但要指定 第二维的长度。
4.存储二维数组的元素是按行顺序存放的。
二维数组的总字节数: 行数×列数×类型字节数 =总字节数
三.字符数组
用来存放字符型数据的数组。在字符数组中, 每一个数组元素只能存放一个字符。
1,格式: char 数组名[常量表达式]; char 数组名[常量表达式1][常量表达式2];
2,初始化 对二维字符数组可以看作是一维字符串数组
char str[3][6] //包含3个字符串的数组 初始化: char str[3][6]={“wang”, “zhang”, “li”};
存储形式
3.字符数组的输入与输出
数值数组
字符数组
(1)逐个字符输入输出 %c(用%c 对字符数组元素逐个输入、输出字符。)
(2)作为整体一次输入输出 %s(用%s, 对字符数组整体输入或输出字符串)
(3)用字符串输入输出函数
gets( ) 和 puts( )
字符串输入函数
格式: gets(字符数组名);
作用: 将输入的字符串赋给字符数组。输入时, 遇第一个回车符结束输入。可接收空格、制表符。
注意:gets( )函数同scanf( )函数一样, 在读入一个字符串后, 系统自动在字符串后加上一个字符串结束标志’\0’。
函数gets( )只能一次输入一个字符串。
字符串输入函数
格式: puts(字符数组名); 或 puts(字符串);
作用: 输出字符数组的值, 遇’\0’结束输出。
注意: puts( )一次只能输出一个字符串。输出字符串后自动换行。可以输出转义字符。
printf( )函数可以同时输出多个字符串, 并且能灵活控制是否换行, 所以printf( )函数比puts( )函数更为常用。
4.注意
(1)scanf函数参数要求的是地址, 故直接用字符数组名进行操作。
(2)输出字符不包括结束符‘\0’。
(3)用%s格式符输出字符串时, 输出项只能是字符数组名, 不能是数组元素名。 printf(“%s\n” , a[0]);
(4)%s 输入字符串时, 遇空格、回车符、Tab结束输入。 不能接收空格。
(5)若一个字符数组中含有一个或多个“\0”, 则遇到第一个“\0”时结束输出。