c语言小白笔记
1.结构体: 结构体本质就是自定义函数类型。 类型名称:struct ; 结构体名称可以理解成一张图纸; 结构体的定义:
struct 结构体名称{
数据类型 成员名称;
........
}
结构体变量:struct 结构体名称 变量名; 如何访问结构体变量中的成员? 结构体变量,成员名称,表示结构体变量中的成员; 2.结构体指针: 1.结构体指针变量 struct 结构体名称 *p; ->:指向运算符 格式:结构体指针变量 ->成员名称:表示指针指向的结构体变量的某个成员; 2.如何通过指针访问结构体变量成员 (1).(*指针变量) 成员名称 (2).指针变量-> 成员名称 3.指针操作数组每一个元素的方式: p++;(*p).成员名称;p->成员名称;p[i].成员名称;
嵌套结构体
1.定义结构体时,结构体中的类型应该是已经存在过的类型; 2.如果嵌套结构体,那么该结构体在之前就应该已经定义过; 3.每一个结构体变量只能访问自己的成员,如果有嵌套体结构要一级一级访问;
结构体对齐原则
1.每个成员按照自己的字节数对齐; 2.最后总的字节数是最大对齐数的整数倍;如果不是,补齐到第一个整数倍为止; 3.结构体按照自己最大的对齐数对齐; 4.数组按照元素的大小对齐;
typedef:
给已经存在的数据类型取一个别名; 语法:typedef 已经存在的类型名 别名;
运算符优先级(由高到低):
1.();[];->; 2.单目运算符:++;–;&;!;(强转);;sizeof(); 3.算术运算符:先:;/;%;后:+;-; 4.关系运算符:先:!=;==;后:> ;>=;<;<=; 5.逻辑运算符:先:&&;后:||; 6.条件(三目)运算符:表达式1?表达式2:表达式三; 7.赋值运算符:=;+=;-=;*=;自左向右; 8.逗号运算符;
文件操作的步骤
1.打开文件,将应用程序和文件建立关联; 2.读,写文件操作; 3.关闭文件;
fopen的用法
#include <stdio.h>
#if 0
FILE *fopen(const char *pathname, const char *mode);
函数功能: 打开文件
参数说明:
pathname: 文件路径
mode : 打开模式 (文本文件操作的方式: r w a, 二进制文件操作的方式:rb wb ab)
返回值: 成功返回结构体的起始起始
失败返回NULL
#endif
int main()
{
FILE *fp = NULL;
#if 0
1、以读的方式打开文件,如果文件不存在,打开失败!
2、以写的方式打开文件,如果文件不存在,创建文件,如果文件存在,清空文件中所有的内容
3、以追加的方式打开文件,如果文件不存在,创建文件, 如果文件存在,不清空内容,文件指针指向内容的最后
#endif
fp = fopen("./data.txt", "ab");
if(NULL == fp)
{
perror("fopen");
return -1;
}
printf("打开文件成功!\n");
return 0;
}
fwrite的用法
#include <stdio.h>
#if 0
size_t fwrite(const void *ptr, size_t size, size_t nmemb,
FILE *stream);
函数功能: 以二进制的方式写文件
参数说明:
ptr: 写数据的起始地址
size: 数据的单位大小
nmemb:数据的个数
stream: 文件指针
返回值:返回成功写进去的个数
#endif
int main()
{
FILE *fp = NULL;
fp = fopen("./data.txt", "wb");
if(NULL == fp)
{
perror("fopen");
return -1;
}
int data[5] = {1,2,3,4,5};
int ret;
ret = fwrite(data, sizeof(int), 5, fp);
if(ret<5)
{
perror("fwrite");
return -1;
}
printf("写入成功!\n");
fclose(fp);
return 0;
}
fread的用法
#include <stdio.h>
#if 0
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
函数说明: 以二进制的方式读文件
参数说明:
ptr: 存放读数据内存的起始地址
size : 数据的单位大小
nmemb: 读数据的个数
stream : 文件指针
返回值: 返回值等于0 ,表示到达文件结尾!!!!
#endif
int main()
{
FILE *fp = NULL;
fp = fopen("./data.txt", "rb");
if(NULL == fp)
{
perror("fopen");
return -1;
}
int data[100];
int temp;
int i = 0;
int ret;
while(1)
{
ret = fread(&temp, sizeof(int), 1, fp);
if(0 == ret)
{
break;
}
data[i] = temp;
i ++;
}
fclose(fp);
for(int j=0; j<i; j++)
{
printf("%d ", data[j]);
}
printf("\n");
return 0;
}
fprintf的用法
#include <stdio.h>
struct student
{
int num;
char name[32];
};
int main()
{
FILE *fp = NULL;
fp = fopen("./data.txt", "w");
if(NULL == fp)
{
perror("fopen");
return -1;
}
struct student s1 = {1001, "zhangsan"};
int ret;
ret = fprintf(fp, "%d\t%s\n", s1.num, s1.name);
if(ret<0)
{
perror("fprintf");
fclose(fp);
return -1;
}
fclose(fp);
return 0;
}
fscanf的用法
#include <stdio.h>
struct student
{
int num;
char name[32];
};
int main()
{
FILE *fp = NULL;
fp = fopen("./data.txt", "r");
if(NULL == fp)
{
perror("fopen");
return -1;
}
struct student s[5];
struct student temp;
int i=0;
int ret;
while(1)
{
ret = fscanf(fp, "%d%s", &temp.num, temp.name);
if(EOF == ret)
{
break;
}
s[i] = temp;
i ++;
}
fclose(fp);
for(int j=0; j<i; j++)
{
printf("%d\t%s\n", s[j].num, s[j].name);
}
return 0;
}
fgets的用法
#include <stdio.h>
int main()
{
FILE *fp = NULL;
fp = fopen("./test.conf", "r");
if(NULL == fp)
{
perror("fopen");
return -1;
}
char buff[1024];
while(NULL != fgets(buff, 1024, fp))
{
printf("buff: %s\n", buff);
}
fclose(fp);
return 0;
}
小练习: 制作一个可以存储影片信息的影片管理系统,每个功能使用一个独立函数封装起来。
主函数
结构体
添加函数
删除函数
修改函数
显示函数
数据保存函数
写入数据函数
|