数组
- 只能存储一个所声明的数据类型的数值的变量称为原子变量(atomic variable)或标量变量(scalar variable)
- 一种可以存储获取数据的方法是使用数据结构(data structure)或者叫聚合数据类型(aggregate data type)
-
数组(array)是最简单的数据结构
一维数组
- 由相同数据类型的单一项目组成的数组称为一维数组
- C语言数组的开始索引值总是0,并且不能改变
- C语言并不检查正在使用的索引数值(即边界检查).例如,使用超出声明数组长度的索引值,编译器不会通报这个错误
数组初始化
- 声明语句中没有给出特定的初始化,所有的数字数组元素都会被设置为0
int distance[100]; //所有元素都为0
- 当初始化数值包含在声明语句中时,数组的大小可以省略
int gallons[ ] = {1,2,3,4,5};
int gallons[6] = {1,2,3,4,5}; //两个数组是相等的
- 初始化字符数组时,可以使用包含在双引号中的字符序列
char codes[] = "sample";
- 对于字符数组来说,最后一个字符为空字符(NULL),由C编译器自动地追加到所有的字符串后面用来标记一个字符串的结束;并且这个字符在内部存储代码数值上等于0(字符0在内部存储代码数值上等于48,因此两者不会被混淆)
数组作为函数实参
- 当数组作为函数实参传入函数时,只是将数组第一个元素的地址传入函数,并不会生成将实参数组复制给形参
void findmax(int vals[]); //可选的函数首部行
二维数组
int val[3][4]; //二维数组声明
int val[3][4] = { {1,2,3,4},
{5,6,7,8},
{9,10,11,12} }; //初始化,用多个括号分开
int val[3][4] = { 1,2,3,4,
5,6,7,8,
9,10,11,12 }; //内部括号可以省略
int val[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; //分行也不是必须的,但是是一种好的编程习惯
字符串
基础
库函数
输入数据验证
格式化字符串
数据文件
声明,打开与关闭文件流
-
文件流(file stream)是用于连接存储在物理设备上的文件到一个程序的单向传输路径;从一个文件接收数据到一个程序的文件流称为输入文件流(input file stream);发送(即写入)数据到一个文件的文件流称为输出文件流(output file stream)
- 声明文件流是通过声明一个有FILE类型的变量名(指针)来实现的
FILE *inFile; //一个例子
- 打开文件流:打开函数称为fopen(),参数为文件的外部名,以及文件要被使用的模式;允许的模式有r,w或a,分别代表读、写或附加
inFile = fopen("prices.bnd", "r"); //一个例子
fclose(inFile);
读取和写入文本文件
fputc(c, filename) //把一个字符写入文件
fputs(string, filename) //把一个字符串写入文件
fprintf(filename, "format", args) //按照格式把一个参数的数值写入文件
fgetc(filename) //从文件中读取一个字符
fgets(stringname, n, filename) //从文件读取n-1个字符并把字符存储在给定的字符串名中
fscanf(filename, "format", &args) //根据这个格式,从文件读取所列出的参数值
- 我们目前使用的数据文件指针都是逻辑文件指针,也就是指向数据文件;C语言还支持物理文件指针,即指向一个硬件设备,例如键盘、显示器或打印机;例如在程序中遇到一个scanf()函数调用时,计算机自动转向标准输入文件也就是键盘来获得输入的内容;遇到一个printf()函数时,计算机将内容写入标准输出文件指派的设备,对于大多数系统而言是显示器
- 从上,我们可以得知printf(),scanf()分别是fprintf(),fscanf()函数的特例
fprintf(stdout, "Hello World");
printf("Hello World"); //两个语句等价
fscanf(stdin, "%d", &num);
scanf("%d", &num); //两个语句等价
随机文件访问
传递和返回文件名
写入和读取二进制文件
网友评论