目录
1.结构体(struct)
结构体是一种用户自定义的数据类型,它可以包含多个不同类型的成员变量,并将它们组合成一个逻辑单元。结构体可以用来表示复杂的数据结构,如图形、人员、汽车等。
struct tag_name
{
member_type1 member_name1;
member_type2 member_name2;
// ...
member_typeN member_nameN;
};
其中,tag_name
是结构体的标识符,member_type
是成员变量的类型,member_name
是成员变量的名称。
struct Student
{
int id;
char name[20];
int age;
float score;
};
在定义完结构体后,可以通过以下方式来创建结构体变量:
struct Student stu = { 1001, "Tom", 18, 90.5 };
也可以通过成员访问运算符.
来访问结构体变量中的成员变量:
2.联合(Union)
联合是C语言中一种特殊的数据类型,它与结构体类似,都是用来组合不同类型的数据,但不同的是,联合中所有的成员变量共用同一块内存空间。
在联合中,所有成员变量的内存空间是相互重叠的,共享同一块内存区域,联合的大小等于其中最大的成员变量的大小。因此,联合通常用于需要同时使用不同类型的数据,但是只需要占用一块内存空间的情况。
定义联合的语法与定义结构体类似
union union_name
{
member_type1 member_name1;
member_type2 member_name2;
// ...
member_typeN member_nameN;
};
其中,union_name
是联合的标识符,member_type
是成员变量的类型,member_name
是成员变量的名称。
union Data
{
int i;
float f;
char str[20];
};
int main()
{
union Data data;
data.i = 10;
printf("data.i = %d\n", data.i);
data.f = 3.14;
printf("data.f = %f\n", data.f);
strcpy(data.str, "hello");
printf("data.str = %s\n", data.str);
return 0;
}
在该例子中,定义了一个包含三个成员变量的联合
Data
,分别是一个整型变量i
,一个浮点型变量f
和一个字符数组str
。在main
函数中,首先将整型变量i
的值设置为10
,然后输出它的值。接着将浮点型变量f
的值设置为3.14
,再次输出它的值。最后,将字符串"hello"
复制到字符数组str
中,并输出该数组的值。由于联合中的所有成员变量共用同一块内存空间,因此在设置了f
和str
的值后,i
的值会被覆盖。
3.枚举(enum)
枚举是一种用户自定义的数据类型,它可以定义一组具有相同类型的命名常量。枚举常用于表示状态、选项、菜单等。
enum enum_name
{
value1,
value2,
// ...
valueN
};
其中,enum_name
是枚举的标识符,value
是枚举常量的名称。
enum Weekday
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};
在定义完枚举后,可以通过以下方式来创建枚举变量:
enum Weekday today = Tuesday;
也可以通过枚举常量的名称来访问枚举变量:
printf("Today is %d\n", today);
如果没有显式地给枚举常量指定值,枚举常量的默认取值是从0开始递增的。
所以输出结果为 Today is 1
,因为 Tuesday
对应的枚举常量值为 1
。
4.文件操作
C语言提供了一组标准的文件操作函数,可以用来打开、读写、关闭文件等操作。下面介绍一些常用的文件操作函数:
1.打开文件
打开文件需要使用 fopen()
函数
FILE* fopen(const char* filename, const char* mode);
其中,filename
是要打开的文件的名称,mode
是以何种方式打开文件的字符串参数,返回值是一个指向 FILE
类型的指针。
常用的文件打开模式如下:
"r"
:以只读方式打开文件,文件必须存在。"w"
:以写方式打开文件,如果文件存在则清空文件,如果不存在则创建文件。"a"
:以追加方式打开文件,如果文件不存在则创建文件。"r+"
:以读写方式打开文件,文件必须存在。"w+"
:以读写方式打开文件,如果文件存在则清空文件,如果不存在则创建文件。"a+"
:以读写方式打开文件,如果文件不存在则创建文件,并在文件末尾追加内容。
例如,打开一个名为 test.txt
的文件,以只读方式打开,代码如下:
FILE* fp = fopen("test.txt", "r");
2.读写文件
在打开文件之后,可以使用 fread()
和 fwrite()
函数进行文件读写操作
size_t fread(void* ptr, size_t size, size_t count, FILE* stream);
size_t fwrite(const void* ptr, size_t size, size_t count, FILE* stream);
其中,ptr
是要读写的数据的指针,size
是每个数据项的大小,count
是要读写的数据项的数量,stream
是指向要读写的文件的指针。例如,从文件中读取一个整数
int n;
fread(&n, sizeof(int), 1, fp);
将一个整数写入文件中
int n = 10;
fwrite(&n, sizeof(int), 1, fp);
3.关闭文件
文件操作完成之后,需要使用 fclose()
函数关闭文件
int fclose(FILE* stream);
其中,stream
是要关闭的文件的指针,返回值为 0 表示关闭成功,返回值为 EOF 表示关闭失败。例如,关闭刚才打开的文件
fclose(fp);
除了上述函数外,C语言还提供了一些其他的文件操作函数,例如
fgets()
、fputs()
、fseek()
、ftell()
等,可以根据需要进行使用。需要注意的是,在进行文件操作时,需要对文件进行错误处理,以保证程序的健壮性。
C语言的基础知识到这里也就结束了,还有一些会碰到的知识点可能有所遗漏,后面的话会专门做一篇文章查缺补漏。