首页 > 编程语言 > 详细

黑马程序员-------C语言回顾-结构体、枚举和文件

时间:2015-11-06 00:15:57      阅读:265      评论:0      收藏:0      [点我收藏+]

------ android培训、java培训、期待与您交流! ----------

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[21];
    }stu1,stu2;
    stu1.age=10;
    //stu1.name="fffff";
    strcpy(stu1.name, "fanffff");
    
    //定义的同时初始化
    struct student stu={22,"ddd"};
    struct student stu3={.name="ssssssd"};
    
    printf("%s\n",stu1.name);
    printf("%s\n",stu.name);
    return 0;
}

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

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

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

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

4.结构体作用域

全局和局部

5.结构数组

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

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

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(文件指针);//指针自动偏移每次读一个字符

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

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

 

黑马程序员-------C语言回顾-结构体、枚举和文件

原文:http://www.cnblogs.com/fanglove/p/4940236.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!