1.构造类型

根据已经定义的一个或多个数据类型用构造的方法来定义。

分为:数组、结构体和共用体

2.结构体

struct 结构体名{

  成员列表;  

};

1)结构体定义完成以后,计算机不会给结构体分配存储空间

2)会在定义结构体变量后,分配存储空间

struct student stu;//可以定义多个

3)匿名结构体

struct{

  char * color;

  int  age;

}stu1,stu2;

4)结构体中成员的访问

用点

stu1.age

5)结构体的初始化

//
// main.c
// 结构体
//
// Created by fanyafang on 15/11/5.
// Copyright © 2015年 itcast. All rights reserved.
// #include <stdio.h>
#include <string.h> int main(int argc, const char * argv[]) {
//先定义后初始化
struct student{
int age;
char name[];
}stu1,stu2;
stu1.age=;
//stu1.name="fffff";
strcpy(stu1.name, "fanffff"); //定义的同时初始化
struct student stu={,"ddd"};
struct student stu3={.name="ssssssd"}; printf("%s\n",stu1.name);
printf("%s\n",stu.name);
return ;
}

3.结构体占用的内存空间是每个成员占用的字节数之和(考虑对齐的问题)

计算结构体变量在内存中占用的字节数的方法

1)先找对齐的模数:是结构体中的基本数据类型中占用字节数最大的那个

2)在计算结构体变量的各个成员占用的字节和

4.结构体作用域

全局和局部

5.结构数组

struct student{
int age;
char name[];
}stu[];

6.结构指针:指向结构体变量的指针

  struct student *p=&stu;

  访问方式:(*p).age或者p->age

7.结构体的嵌套:结构体的成员又是另外一个结构体变量,不可以嵌套自己这个类型的变量,但可以嵌套当前类型的指针

访问的时候用多个点

8.用结构体变量作为函数参数:值传递

结构体指针作为函数参数:地址传递

9.枚举

可看做基本数据类型

//
// main.c
// 枚举
//
// Created by fanyafang on 15/11/5.
// Copyright © 2015年 itcast. All rights reserved.
// #include <stdio.h> int main(int argc, const char * argv[]) { //
//enum Week{one,two,three}; //enum Week week;
enum Week{one,two,three}week; week=two; printf("%d\n",week);
return ;
}

10.typeof给已经存在的类型取别名

typeof int MALATANG;

MALATANG a=10;

用在数组:

typeof int ARRAY[5];//int a[5];

ARRAY a1={1,2,3,4,5};

用在结构体:

typeof struct person p;

11.预处理指令

以#开头的指令,宏定义define,文件包含include,条件编译

宏定义:#define M 5*5+5

1)替换时不加括号

2)字符串中的不会被替换

3)#undef M;//取消宏定义

4)可以嵌套

5)可以加参数 #define M(a)  a*a+5

要把参数代入替换

6)有参宏传递参数的时候最好加括号

12.条件编译,减少.o文件的大小

#if #else #elif #endif

#ifdef//检测宏是否定义

#ifndef

13.static延长变量的生命周期

1)static定义局部变量的语句只会被执行一次(放在数据区)

2)static修饰的全局变量只能在当前文件中使用(内部变量)

  在不同的文件中static可以声明相同的变量

3)static修饰的函数是内部函数,只能在当前文件中使用

14.extern

1)不能修饰局部变量

2)extern修饰的全局变量,可以在其他文件中使用

extern生命的全局变量在不同的文件中不能同名

在使用之前可以声明,extern int a;

3)extern修饰的函数可以在其他文件中使用

15.文件

ascii文件和二进制文件

头文件stdio

文件缓冲区,系统自动地在内存中为每个正在使用的文件开辟一个文件缓冲区

1)文件指针FILE *fp;

2)文件的打开:fp=fopen("a.txt",'r');打开成功返回首地址,打开失败返回NULL

3)文件关闭:fclose(fp);正常关闭返回为0;

4)文件的使用方式

'r' 'w' 'a' 'r+' 'w+' 'a+' 't' 'b'

5)文件输入输出函数

fputc(字符,文件指针);

fgetc(文件指针);//指针自动偏移每次读一个字符

///Users/fanyafang/Library/Developer/Xcode/DerivedData/OC2-fdozqblmcmvpugdcerdoucgzrwvl/Build/Products/Debug/
//文件在这个目录下找
//写入和读取一个字符
FILE *fp=fopen("a.txt", "r");
if(fp!=NULL){
char ch='x';
//fputc(ch,fp);
//printf("写入成功"); ch=fgetc(fp); printf("读取成功%c",ch);
}else{
printf("打开失败");
}
fclose(fp);
//写入和读取一个字符串
char ch[]="i love chaina";
FILE *fp=fopen("a.txt", "r+");
if(fp!=NULL){
/*
for(int i=0;i<strlen(ch);i++){
fputc(ch[i],fp);
} printf("写入成功");
*/ char s=fgetc(fp);
while (s!=EOF) {
putchar(s);
s=fgetc(fp);
} printf("读取成功");
}else{
printf("打开失败");
}
fclose(fp);

fputs(字符串,文件指针);

fgets(字符串,长度,文件指针);遇到\n或者EFO结束,读一行

//写入和读取一个字符
//char ch[]="i love chaina33333sssss";
FILE *fp=fopen("a.txt", "r+");
if(fp!=NULL){ //int count=fputs(ch, fp); //printf("写入成功,写入%d个字符",count); char s[];
fgets(s, , fp);
printf("%s",s); }else{
printf("打开失败");
}
fclose(fp);

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

//写入和读取
char ch[]="i love chaina555555";
FILE *fp=fopen("a.txt", "r+");//wb写入二进制文件
if(fp!=NULL){ fwrite(ch, strlen(ch), , fp);
printf("写入成功"); rewind(fp);//文件指针再指到开始位置
char s[];
fread(s, sizeof(s), ,fp);
printf("%s",s); }else{
printf("打开失败");
}
fclose(fp);

fprintf(fp,"%d#%d",a,b);

fscanf(fp,"%d#%d",&a,&b);

文件的随机读写

rewind(文件指针);//将指针移到文件首

fseek(文件指针,位移量,起始点);//将指针从起始点移动,一般用于读写二进制文件

起始点0SEEK_SET,1SEEK_CUR,2SEEK_END

feof(文件指针);//检测文件是否到末尾

ferror(文件指针);//判断是否读取错误

clearerror(文件指针);//清楚出错标志

C语言回顾-结构体、枚举和文件的更多相关文章

  1. C语言的结构体,枚举类型在程序中的作用

    http://www.xue63.com/xueask-1221-12212854.html 结构和枚举类型从程序实现的角度来说,是用更接近自然语言的方式来表达数据.比如说实现2维空间的点,你可以使用 ...

  2. OC基础--结构体 枚举做类成员属性

    结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation ...

  3. 01.C语言关于结构体的学习笔记

    我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...

  4. go语言学习-结构体

    结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...

  5. C语言中结构体赋值问题的讨论

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  6. C语言的结构体和C++结构体的区别

    关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...

  7. C语言中结构体对齐问题

    C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...

  8. 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式

    逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...

  9. C语言中结构体赋值问题的讨论(转载)

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

随机推荐

  1. jQuery插件开发(转)

    jQuery插件开发全解析 jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命 ...

  2. 【emWin】例程七:绘制基本图形

    简介:emWin 包含完整的2-D 图形库,可供大多数应用程序充分使用 本例程介绍如何使用图形API绘制基本的2-D图形 实验指导书及代码包下载: 链接:http://pan.baidu.com/s/ ...

  3. IE浏览器测试

    http://www.iefans.net/ http://ie8.00791.com/ https://www.browserstack.com/http://browserhacks.com/

  4. Apache Spark技术实战之9 -- 日志级别修改

    摘要 在学习使用Spark的过程中,总是想对内部运行过程作深入的了解,其中DEBUG和TRACE级别的日志可以为我们提供详细和有用的信息,那么如何进行合理设置呢,不复杂但也绝不是将一个INFO换为TR ...

  5. Mybatis与Spring整合,使用了maven管理项目,作为初学者觉得不错,转载下来

    转载自:http://www.cnblogs.com/xdp-gacl/p/4271627.html 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype ...

  6. KITTI数据集格式说明

    由于上一篇博客所提到的论文中的训练数据是KITTI的数据集,因此如果我想要用自己的数据集进行训练的话,就需要先弄清楚KITTI数据集的格式,在以下的网址找到了说明: 首先,数据描述中是这样的: 在以下 ...

  7. 通过版本号实现乐观锁(MVCC)

    乐观锁大多是基于数据版本记录的机制实现 , 如 , 为每一行数据增加一个整型版本标识(version) , 每次数据更新都把版本号+1 工作原理:读取出数据时,将此版本号一同读出,之后更新时,对此版本 ...

  8. html中submit和button的区别/ window.location.href 不跳转 的问题

    <input type="button">  <input type="submit"> 这两个的区别 是 button 不会自动提交表 ...

  9. Liunx面试题

    答案待定 1.请用shell查询file1 里面空行的所在行号2.编写ShellScript查询file1 以abc 结尾的行3.打印出file1 文件第1 到第3 行4.如何将本地80 端口的请求转 ...

  10. 基于 debootstrap 和 busybox 构建 mini ubuntu

    基于 debootstrap 和 busybox 构建 mini ubuntu 最近的工作涉及到服务器自动安装和网络部署操作系统,然后使用 ansible 和 saltsatck 进行配置并安装 op ...