缓冲区
方式一
循环读取缓冲区字符
方式二
+
goto 语句
跳转至指令标签处执行(可实现一个类while语句循环语句)
数组(内存中开辟连续空间相同数据类型)
保存数据较多时,为便于保存,常使用数组(把一组相同类型的数存储起来,可以保存多个值)
数组也是一个变量,只不过是一个可以保存多个相同数据类型的变量
和变量相同,先声明再使用
数据类型 变量名[];
int arr[10];
含义:变量名为arr的数组可保存10个int类型的值
声明变量的真正意义是在内存中开辟空间
int a=10;在内存中开辟4字节空间,用来保存10
int arr[10];
在内存中开辟40个字节空间,并且是连续存储的,用来保存10个int类型的值
默认数组中每个值都为0
初始化数组
方式一:可以在声明数组变量时同时进行初始化,值与值之间逗号分隔
int arr[10]={1,2,3,4,5,6,7,8,9,10};
方式二:可以在声明变量时同时进行初始化
int arr[]={1,2,3,4,5,6,7,8,10};
数组中声明了九个变量的值
方式三:可以在声明变量时同时进行部分初始化
int arr[10]={1,2,3};
数组中声明前三个值分别为1,2,3
如何在内存中获取数组中的元素
可以通过别名来获取,数组中每个值也有别名,为方便获取数组中的值,对数组中的内容进行编号(索引)从0开始
别名 arr[0],arr[1],arr[2] 数组名加索引
数组名arr 数组中的值称元素
数据类型 数组名[元素数]={表达式1,表达式2,表达式3....}
获取数组中值的个数
size =sizeof(arr)/sizeof[arr[0]]
如何修改数组中元素的值
数组名[索引]=表达式
不能删除数组中的元素,一旦数组创建大小固定,不能改变
数组中元素的个数一定是一个无符号整型常量
具有常属性的变量也是一个变量,数组名一定是一个常量
运行时报错误,内存问题
字符串:多个字符
在C语言中使用字符数组来保存字符串
char name[]={"jack"} size = 5 字符串最后会加一个结尾标识\0
char name[]="jack" 5字节
char name[256]={"jack"};
char name[]={'j','a','c','k','\0'}; 5字节
%s在打印时遇到\0结束打印
在计算size[分配空间的大小]时,sizeof运算符,包含\0
在计算字符串长度时,#include <strling>strlen()函数,不能包含\0;
char name[256]={0};
将变量名去掉,剩下的就是类型
char [256]
数组名就是地址,在输入时不需要加地址符&
数组的应用
<1>冒泡排序(升序)
1 4 6 13 45 76 3 61
采取规则;相邻元素进行比较,如果前面元素比后面元素大,就交换位置
第一轮 n-1
第二轮 n-2
......
第n-1轮 n- (n-1)=1
%-3d左对齐
控制每轮比较的次数(前面元素与后面元素比较)
二维数组
看作一维数组,只不过数组中的每个元素也是一个一维数组
int arr1[3]={1,2,3};
int arr2[3]={4,5,6};
int arr3[3]={7,8,9};
int arr[3]={arr1,arr2,arr3};
int arr[3][3]={arr1,arr2,arr3};
二维数组对应的是一个平面图形
arr[1][1]
二维数组的声明
int arr[3][4];
double arr[10][10];
声明二维数组时同时进行初始化
int arr[3][3]={{1,2,3},{4,5,6}}
int arr[3][3]={{1,2,3}}
int arr[3][3]={{1,2},{4,5,6}};
int arr[3][3]={1,2,3,4};
声明二维数组可以省略行号
int arr[][3]={{1,2},{4,5,6},{7,8}}
int arr[3][3]={1,2,3,4,5,6,7,8}
打印第一行第二列元素
int num = arr[1][2];
printf("%d",num);
打印所有行所有列
计算行数
rows=sizeof(arr[])/sizeof(arr[0])
字符二维数组
二维数组在内存中也是连续分配
二维数组的初始化
字符串
三维数组
函数
指针