临时笔记

一、结构指针:

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);
  }
}    

 

posted @ 2021-08-23 10:43  hl爱编程  阅读(41)  评论(0)    收藏  举报