本周主要学习了C语言的以下知识点:
1.字符串
字符串在C语言中可以被当做一个常量,存储在常量区,或着用字符数组保存在堆栈中。
注意字符串常量是自带尾零的,例如 char a[32] = "hello world";这里sizeof(a)=32, strlen(a)=11 .因为sizeof取是这个字符数组的最大元素个数,strlen取的是字符串的长度,不包含尾零。
如果这么初始化字符串: char a[] = {'a','b','c','\0'}; 最后一个字符后要加尾零,除非指定了字符数组的长度,比如char a[32] = {'a','b','c'};
因为这样初始化,’c'元素后面会自动补满尾零。
字符串的操作,常用的有strcat,strlen,strcpy,strcmp等,注意这些函数的入参都只能是字符串,像memcpy函数就不局限于字符串。
2.结构体
结构体是一种自定义的,可以包含多个不同数据类型的域的数据类型,方便封装;还可以用typedef重命名该结构体。注意定义时最后要加分号结束。
结构体中域的访问,有点号和指向符号两种;例如有struct student s; struct student *p = &s; 则可以这么访问学生学号s.id 或 p->id;
3.文件
文件的操作分r:只读,w:可写,a:追加,b:二进制
读写文件分三个步骤:打开文件,读写文件,关闭文件。
若是想用二进制读写文件,可以使用fread()和fwrite(); 反之可以用fscanf()和fprintf()读写;注意fwrite()可以一次性写入整个数组,但需要用循环一个一个节点写入链表。
4. 多文件导入
每个头文件都要写明不重复包含:有以下两种方法
第一种:
#pragma once
第二种:
#ifndef _tool_H
#define _tool_H
...
#endif
导入的时候,在自己的模块.h里面写好用到的结构体所在的头文件
然后在自己的模块.c里面包含自己模块的.h文件,这样别人在使用你的模块时,就不用再包含所用到的结构体头文件了
5. 预处理命令:gcc main.c -o main.i -E