临时笔记
一、结构指针:
1、一般形式:struct 结构名称 *结构指针变量名
2、访问结构成员的一般形式:
(1)、(*结构指针变量).成员变量名
(2)、结构指针变量->成员变量名
二、头文件标准写法
#ifndef HERO_H_INCLUODE//如果没有定义HERO_H_INCLUODE
#define HERO_H_INCLUODE//定义HERO_H_INCLUODE
#include <stdio.h>
#include <stdlib.h>
//等等......
typedef struct _job//宏定义类型
{
}Job;
#endif //结束头文件
1、上面的宏定义类型定义struct,下一次使用时直接Job job,就定义了一个job结构体
三、结构数组
1、元素为结构类型的数组称为结构数组
如:
struct Role {
char * name;
int age;
char *job;
}roles[25];
struct Role roles[25];
roles[25] = {
{...},//roles[0]
{...},//roles[1]
...
{...}//roles[24]
}
2、一个小注意点:动态录入时,如果要动态录入的是char类型的话,要动态分配内存使用stdlib.h里面的malloc
四、回调函数的定义
当一个函数指针被当作某个函数的参数,且该函数指针调用所指向的函数时,我们就说这是回调函数
简单应用
1 #include<stdio.h> 2 //回调函数的实验 3 4 int sum(int,int); 5 int sub(int,int); 6 //实现加减乘除 7 int sum(int a,int b) 8 { 9 return (a+b); 10 }; 11 12 int sub(int a,int b) 13 { 14 return (a-b); 15 }; 16 //定义回调函数 17 int sum_sub(int a,int b,int (*p)(int,int)) 18 { 19 return p(a,b); 20 }; 21 int main() 22 { 23 int a=3,b=4,c,d; 24 //使用回调函数 25 c = sum_sub(a,b,sum); 26 d = sum_sub(a,b,sub); 27 printf("a+b = %d\n",c); 28 printf("a-b = %d\n",d); 29 }
五、枚举类型
枚举类型的定义有点像结构体但和结构体相差很大,枚举类型都是整型,且会自动加1,如果第一个值没有赋值的话那么默认为0
1 #include<stdio.h> 2 3 int main() 4 { 5 enum Day{ 6 mon = 1,tue,wed,thu,fri,sat,sun 7 }; 8 enum Day day; 9 day = mon; 10 printf("星期一%d\n",mon); 11 }
六、结构体指针
struct Books{
char *name;
......
}book1;
//结构体指针指向book1;
struct Books *p1 = &book1;
//通过结构体指针访问结构体成员的两种方式‘
(*p1).name;
p1->name;
七、结构体
用途:使几个不同类型的变量共占一段内存(相互覆盖)
例如·:
union data { int i; char ch; float f; };
共用体变量中起作用的成员是最后一次存放的成员,因为系统只会分配一段内存给共用体。这也是共用体和结构体的区别
例如
union data data1; data1.i = 1; data1.ch = 'a' printf("%d\n",data1.i);//编译会通过但是结果不对,因为已经被data1.ch冲掉了 printf("%s\n",data1.ch);//编译通过
八、typedef的用法
功能:用自定义名字为已有数据类型命名
例如:
typedef struct _data{ ... }Data;//相当于给 struct _data起了一个别名叫做Data
那么下次想要定义结构体变量时就不用那么麻烦了直接使用:
Data data1;//这样就定义好了一个结构体变量,
上面其实就是给个类型名给这个类型名起一个别名
九、文件
1、文件的打开(fopen())
FILE *fp;//声明一个文件指针,实质上是一个结构体指针 fp = fopen("文件路径","打开方式");//将文件地址给fp相当与打开文件,fopen()函数会返回一个指针,如果返回的是NULL说明返回失败
if(fp == NULL){ printf("%s\n",文件打开失败); exit(0);//注意此函数可以关闭所有文件并停止调用,且该函数在stdlib.h里 }
文件打开的几种方式
方式 | 处理方式 | 指定文件不存在 | 文件存在 |
r | 只读 | 出错 | 正常 |
w | 只写 | 建立新文件 | 原内容丢失 |
a | 追加 | 建立新文件 | 在原内容后追加 |
r+/w+ | 读写 | 出错 | 正常 |
2、文件的关闭(fclose())
作用:释放文件结构体和指针
fclose(fp);
3、文件的读写(fputc())
函数原型:int fputc(int c,FILE *fp);
功能:把一字节代码c写入fp指向文件中
fgetc(File *fp);从文件里面读一个字节的代码
fputc(char ch,File *fp);将一个或多个字节ch添加到fp所指向的文件中
fread(buffer,size,count,fp);
buffer:要读入的数据块的存放地址或要输出的数据块的起始地址(数组)
size每个要读/写的数据块的大小
count:要读或写的数据块个数
fp:指针
如:
fread(f,4,2,fp);//表示从fp指向的文件往数组f里面读,一次读4乘2字节
fwrite(buffer,size,count,fp);
文本文件的终止符为EOF,下面代码是对文本文件的读操作
//文本文件读 FILE *fp fp = fopen("xxx","xx"); char ch = fgetc(fp); while(ch != EOF){ putchar(ch); ch = fgetc(fp); } fclose(fp);
下面代码是对文本文件写操作
#include<stdio.h> #include<stdlib.h> int main() { FILE *fp; fp = fopen("文件路径及名字","w"); if(fp == NULL){ printf("%s\n","文件创建失败"); exit(0); } else{ char ch = getchar(); while(ch != '#'){//当输入#回车结束输入 fputc(ch,fp); ch = getchar(); } fclose(fp); } }
本文来自博客园,作者:hl爱编程,转载请注明原文链接:https://www.cnblogs.com/hlprogrammer/p/15174942.html