C语言学习笔记<九>
数组名称和数组名了地址,得到的结果是一样的,都是一个相同的指针地址。
但有一个重要的区别是,当数组名+1运算是得到的是地址加一个元素的大小而取数组地址 +1得到的是整个数组的大小,指针的运算和指针的类型有关。
数组名称也可以取地址,得到的地址数据和二维数组名称所代表的地址数据类似。对他们做加一操作时增加的是整个一维数组。这样的地址数据可以赋值给数组指针变量,这么指针声明方法如下
int (*p_value)[5];
FILE 结构体用来记录文件相关的信息
FILE 结构体类型的指针变量叫做文件指针。
fopen 函数可以打开一个文件并制作对应的 FILE 结构体变量,把结构体变量的地址作为返回值使用。如果执行失败则返回 NULL.
使用fopen 函数时需要指定文件的操作方式。操作方式由三部分构成,分别如下
第一部分有三个可选的字符'r','w'和'a',这部份必须指定并且只能指定一个字符。
'r' 对文件执行读操作
'w' 对文件进行写操作。如果文件不存在则创建新文件否则把原文件内容清除。
'a' 对文件进行写操作。如果文件已存在则会把新内容追加在文件末尾。
第二部份有一个可选字符'+',这部分可有可无,如果使用了这部份则表示对文件进行读写操作。
第三部份有一个可选字符'b',这部份可有可无。如果使用则对文件以二进制的方式来进行操作。
fclose 函数用于关闭一个文件,当程序不再使用某个文件的时候一定要使用这个函数关闭它。
fputc 函数可以把一个字符写入到文件中,如果失败返回 EOF 。
fgetc 函数可以从文件中读出一个字符并返回,如果超过文件尾部则返回.
fwrite 函数可以一次把数组中的多个变量以二进制的方式写入到文件中,返回值表示写入的变量个数。
fread 函数可以一次以二进制方式从文件中读出多个变理的数值并记录到数组中,返回值表示读入的变量个数。
FILE 结构体中使用位置指针记录下次对文件进行读写操作的位置,每次对文件进行过读写操作后位置指针都会移动。
rewind 函数可以把位置指针移动到文件开头。
fseek 函数可以把位置指移动到任何地方。相对开头位置,相对末尾位置,相对当前位置。
SEEK_SET 0 代表文件开头
SEEK_CUR 1 位置指针当前的位置
SEEK_END 2 代表文件结尾
fputs 函数可以把一个字符串写入到文件中。fgets 函数可以从文件中读出一个字符串fprintf 函数可以把数据以指定的格式写入到任何文件中
fscanf 函数可以从任何文件中以指定的格式读入数据到变量中。
/*============================================ *名称:变长参数练习 功能:无 *日期:2013-05-17 by:ant *备注: *=========================================== */ #include <stdio.h> #include <stdlib.h> #include <stdarg.h> int max(int cnt,...) { int ret = 0, loop = 0; va_list v; va_start(v,cnt); for (loop = 0; loop < cnt; loop++) { int value = va_arg(v,int); if (value > ret) { ret = value; } } va_end(v); return ret; } int main() { max(1,9,6,10); printf("max(1,9,6,10)是%d\n",max(3,9,6,18));//第一个参数为要比较的数的个数 printf("max(3,19,25,2)是%d\n",max(3,19,25,2)); return 0; }
/*============================================ *名称:函数练习 功能:无 *日期:2013-05-17 by:ant *备注: *========================================== */ #include<stdio.h> #include<stdlib.h> int main() { int value = atoi("234"); float f_value = 0.0f; char ch; char str[20] = {0}; printf("%d\n",value); double value1 = atof("23.4"); printf("%lg\n",value1); sscanf("25.8 a","%g %c",&f_value,&ch); printf("%c %g\n",ch,f_value); sprintf(str,"%c %g",ch,f_value); printf("%s\n",str); return 0; }
/*=========================================== *名称:文件练习 功能:无 *日期:2013-05-17 by:ant *备注: *========================================= */ #include<stdio.h> #include<stdlib.h> int main() { FILE *p_file = NULL,*p_file1 = NULL; p_file = fopen("a.txt","r");//参数1:文件的路径,参数2:对文件的操作权限 if(p_file) { p_file1 = fopen("b.txt ","w"); if (p_file1) { char ch = 0; do { ch = fgetc(p_file); if(EOF != ch) { if(EOF == fputc(ch,p_file1)) { break; } } }while(EOF != ch); fclose(p_file1); } fclose(p_file);//使用完后要关闭 p_file = NULL; } return 0; }
/*=========================================== *名称:文件练习 功能:无 *日期:2013-05-17 by:ant *备注: *========================================= */ #include<stdio.h> #include<stdlib.h> int main() { FILE *p_file = NULL; char str[] = "abcdef"; int loop = 0; p_file = fopen("a.txt","r");//参数1:文件的路径,参数2:对文件的操作权限 if(p_file) { //文件操作语句 if(p_file) { char ch = 0; do{ ch = fgetc(p_file); if(EOF != ch) { printf("%c",ch); } }while(EOF != ch); } printf("\n"); fclose(p_file);//使用完后要关闭 p_file = NULL; } return 0; }
通知 2.项目 2.1 项目名称 学生信息管理系统 clss.c 2.2 项目描述 实现对学生信息的增加,删除,查找,修改(自行处理),列出所有学生信息。 2.3 项目分析 2.3.1 前奏 学生信息:学号,姓名,性别,年龄,C语言成绩 结构体:不同数据类型成员的集合 2.3.2 功能模块 (1)增加学生信息 int addMessage(); (2)删除学生信息 delMessage(); (3)查找学生信息 findMessage(); (4)列出学生信息 listMessage(); 2.4 项目整体架构 字符界面 有图有真相 2.5 功能模块的详细设计 功能: (1)增加学生信息 int addMessage();->scanf读取用户的输入存储到结构体数组中 (2)删除学生信息 delMessage();->查找指定的学生信息1.数组中后面的向前移动 2.把结构体信息清空 学号=0 IF(学号==0)无效记录 (3)查找学生信息 findMessage();->使用循环加判断 (4)列出学生信息 listMessage();->使用遍历 2.6 采用多文件去编写 student.h ->定义学生信息结构体,声明功能函数。 student.c ->实现上面的功能函数 main.c ->主函数 字符界面 使用Makefile进行项目的编译链接。 2.7 友情赚送 GDB调试的流程: 1.gcc -g xxx.c 以调试的状态去编译这个文件 2.gdb ./a.out 3.list(l) ->显示源代码 方便设断点。 4.break(b) -> 设置断点(后面跟行号,或者函数名称) 5.run (r) -> 运行程序到断点处 6.next (n) ->下一步 7.step(s) -> 进入当前函数 8.prntf(p) ->变量名 -> 输出指定变量名称的数据 9.quit (q)-> 退出调试。 2.8 建议 组长组织组员。 -> 一起合作去写。 口号: 互相帮助,共同进步! 不抛弃,不放弃。