美文网首页
C编程代码

C编程代码

作者: 简洁心飞 | 来源:发表于2019-01-17 14:31 被阅读0次

C教程

结构体、结构体变量、结构体数组、结构体指针、枚举、共用体
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据
结构体是一种集合,可以包含任意数量、任意类型、的变量/数组/指针
既然结构体是一种数据类型,可以用它来定义变量
struct 用来定义C结构体类型
结构体包含、struct 结构体名{ 结构体成员变量;} 结构体类型变量;
可以在全局范围中定义定义结构体、创建结构体变量、但不能给结构体成员赋值
不能在函数外给结构体成员变量赋值、因为结构体是自定义类型、编译器对程序进行编译时,必须先构造或者创建全局变量,为全局变量分配内存,再找入口函数;而在创建全局变量时,该变结构体类型量编译器无法识别,故无法创建该全局变量
结构体使用点号.获取单个成员  "结构体变量名.成员名;"
需要注意的是,
结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;
结构体变量可能包含实实在在的数据,需要内存空间来存储

结构体数组是指数组中的每个元素都是一个结构体。结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。
结构体指针是指指向一个结构体的指针,定义的形式一般为:struct 结构体名 *变量名;
结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&
结构体指针获取结构体成员:"(*pointer).memberName" 或者 "pointer->memberName"
结构体指针作为函数参数:void average(struct stu *ps, int len);

struct stu{
    char *name;   //姓名
    int num;      //学号
    int age;      //年龄
    char group;   //所在学习小组
    float score;  //成绩
};
可以在定义结构体的同时定义结构体变量
struct stu{
    char *name;   //姓名
    int num;      //学号
    int age;      //年龄
    char group;   //所在学习小组
    float score;  //成绩
}stu1, stu2;
// ...
int main(){
  //给结构体成员赋值
  stu1.name = "Tom";
  stu1.num = 12;
  stu1.age = 18;
  stu1.group = 'A';
  stu1.score = 136.5;
    //读取结构体成员的值
    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);
    return 0;
}
定义结构体数组和定义结构体变量的方式类似
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组 
    float score;  //成绩
}stus[5];
结构体数组在定义的同时也可以初始化
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组 
    float score;  //成绩
}stus[5] = {
    {"Li ping", 5, 18, 'C', 145.0},
    {"Zhang ping", 4, 19, 'A', 130.5},
    {"He fang", 1, 18, 'A', 148.5},
    {"Cheng ling", 2, 17, 'F', 139.0},
    {"Wang ming", 3, 17, 'B', 144.5}
};
当对数组中全部元素赋值时,也可不给出数组长度
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
}stus[] = {
    {"Li ping", 5, 18, 'C', 145.0},
    {"Zhang ping", 4, 19, 'A', 130.5},
    {"He fang", 1, 18, 'A', 148.5},
    {"Cheng ling", 2, 17, 'F', 139.0},
    {"Wang ming", 3, 17, 'B', 144.5}
};
定义结构体指针
#include <stdio.h>

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
} stu1 = { "Tom", 12, 18, 'A', 136.5 };
//结构体指针
struct stu *pstu = &stu1;
int main(){
  printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score);
  //Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!
}

枚举的取值为有限的整数:在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等
枚举类型的定义形式为:enum typeName{ valueName1, valueName2, valueName3, ...... };
枚举成员都是全局的不能在定义相同名称变量、
枚举成员都是常量,不能对它们赋值,只能将它们的值赋给其他的变量

枚举和宏其实非常类似:
宏在预处理阶段将名字替换成对应的值,
枚举在编译阶段将名字替换成对应的值。
我们可以将枚举理解为编译阶段的宏。
enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };  //0-6
enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };  //1-7
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };  //1-7
enum week a, b, c;  //定义枚举变量
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;  // 定义枚举类型的同时定义变量
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;  // 定义枚举类型的同时定义变量、并赋值
#include <stdio.h>
int main(){
    enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;
    scanf("%d", &day);
    switch(day){
        case 1: puts("Monday"); break;
        case 2: puts("Tuesday"); break;
        case 3: puts("Wednesday"); break;
        case 4: puts("Thursday"); break;
        case 5: puts("Friday"); break;
        case 6: puts("Saturday"); break;
        case 7: puts("Sunday"); break;
        default: puts("Error!");
    }
    return 0;
}

C语言共用体(Union
union 共用体名{
    成员列表
};
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉
共用体也是一种自定义类型,可以通过它来创建变量
共用体在一般的编程中应用较少,在单片机中应用较多
union data{
    int n;
    char ch;
    double f;
};
union data a, b, c;
可以在定义共用体的同时创建变量
union data{
    int n;
    char ch;
    double f;
} a, b, c;

相关文章

  • C编程代码

    C教程

  • C++

    C与C++的关系 1.C++可以与C代码进行混编(C++里能写C代码,C里不能写C++代码)2.C++面向对象编程...

  • 极客班第一周学习笔记

    初识C++ C++是在C之上基于对象,面向对象的编程语言。c++相比c在编程上更加模块化,具象化。 C++代码规范...

  • Linux下基于C++的TCP连接demo代码分享(C++,Li

    #C++实现TCP连接 @(C++代码)[网络编程, tcp, C++, C++实现] server.cpp: #...

  • C++语言基础(01)

    1.C与C++的关系 1.C++可以与C代码进行混编2.C++面向对象编程语言、C面向过程的编程3.C++对C的一...

  • 浅谈面向对象

    面向过程编程(如:C、C++)面向对象编程(如:python,java) 面向过程: 根据业务逻辑从上到下写代码。...

  • iOS与OS X多线程和内存管理

    下载地址 苹果源代码不会告诉你的Objective-C高级编程 《图灵程序设计丛书·Objective-C高级编程...

  • 900个经典的C语言编程算法—零基础新手小白也能学会!

    C语言经典编程900例源码集,涉及了基础知识和高级编程,代码中有英文注释,个人觉得,这是学习C语言编程非常不错的范...

  • JNI 编程

    JNI编程 JNI是一种本地编程接口。它允许运行在JAVA虚拟机中的JAVA代码和用其他编程语言,诸如C语言、C+...

  • JNI

    JNI编程 JNI是一种本地编程接口。它允许运行在JAVA虚拟机中的JAVA代码和用其他编程语言,诸如C语言、C+...

网友评论

      本文标题:C编程代码

      本文链接:https://www.haomeiwen.com/subject/enridqtx.html