美文网首页
day04_结构体

day04_结构体

作者: 闪客飞飞 | 来源:发表于2021-01-28 09:29 被阅读0次

    define _CRT_SECURE_NO_WARNINGS

    include <stdio.h>

    include <stdlib.h>

    include<string.h>

    //结构体 :综合的数据类型 把不同的数据类型结合起来,成为一个自定义的数据类型
    //struct Man
    //{
    // char name[20];
    // int age;
    // char* code;
    //
    //};
    //void main(){
    // //初始化结构体 只能在声明的时候赋值,不能单独赋值。
    // //struct Man m1 = { "jack", 21 };
    // struct Man m1;
    // m1.age = 20;
    // m1.code = "qweqeqweqe";
    // strcpy(m1.name, "chengyue");
    // printf("%s,%d", m1.name, m1.age);
    // sprintf(m1.name, "json");
    // system("pause");
    //}
    //结构体的几种写法
    //1.添加变量,预先赋值
    //struct Man
    //{
    // char name[20];
    // int age;
    // char* code;
    //
    //} m1,m2 = {"kack",12,"1231"};//m1,m2 结构体变量名称 m2 预先声明的变量
    //
    //typedef int Age;//取一个新的名字
    //
    //void main(){
    // Age a = 8;
    // m1.age = 12;
    // m1.code = "qweq";
    // strcpy(m1.name, "1233");
    //}

    // 2.匿名结构体
    // 主要用在 控制结构体变量的个数(限量版结构)
    //typedef struct{
    // char name[20];
    // int age;
    // char* code;
    //} m3 ,m4;
    //3.1结构体的嵌套
    //struct Teacher
    //{
    // char* name;
    // int age;
    //};
    //struct Student
    //{
    // char* name;
    // int age;
    // struct Teacher t;
    //};
    //void main(){
    // //struct Student s1 = { "chengyue", 12, {"json",23} };
    //
    // struct Student s1;
    // s1.age = 12;
    // s1.name = "12313";
    // strcpy(s1.t.name, "json");
    // strcpy(s1.t.age, 123);
    //}
    //3.2嵌套2
    //struct Student
    //{
    // char* name;
    // int age;
    // struct Teacher{
    // char* name;
    // int age;
    // } t;
    //};
    //void main(){
    // struct Student s1;
    // strcpy(s1.t.name, "chengyue");
    //
    // struct Teacher t1;
    // t1.name = "chengyue";
    // t1.age = 13;
    //
    // system("pause");
    //}

    //4 结构体 与指针
    //struct Man
    //{
    // char name;
    // int age;
    //};
    //void main(){
    // struct Man m1 = {"jack",23};
    // struct Man p = &m1;
    // printf("%s,%d,%#x\n", (
    p).name,(
    p).age,&p);
    // //结构体指针 -> 是 (*p). 的 简写
    // printf("%s,%d,%#x\n", p->name, p->age, &p);
    // system("pause");
    //}

    // 5 结构体 数组 遍历结构体的数组
    //struct Man
    //{
    // char name;
    // int age;
    //};
    //void main(){
    // struct Man mans[] = {{"jack",23},{ "tom",13} };
    // //遍历数组
    // /
    struct Man p = mans;
    // for (; p < mans + 2; p++){
    // printf("%s,%d", p->name, mans->age);
    // }
    // int i = 0;
    // for (; i < 2; i++){
    // printf("%s,%d", mans[i].name, mans[i].age);
    // }
    /
    // //int i = 0;
    // //for (; i < sizeof(mans) / sizeof(struct Man); i++){
    // // printf("%s,%d", mans[i].name, mans[i].age);
    // //}
    //}

    // 6 结构体的大小 字节对齐
    //struct Man
    //{
    // int age;
    // double weiget;
    //};
    //void main(){
    // struct Man m1 = { 12, 23.2 };
    // printf("%#x,---%d", &m1,sizeof(struct Man));
    //
    // system("pause");
    //}
    结构体变量的大小必须是最宽基本数据类型的整数倍
    // 7.结构体与动态内存分配

    //void main(){
    // struct Man m_p = (struct Man)malloc(sizeof(struct Man) * 10);
    // struct Man p = m_p;
    // p->age = 13;
    // p->name = "chengyue";
    // p++;
    // p->age = 13;
    // p->name = "wer";
    //
    // struct Man loop_p=m_p;
    // for (; loop_p < m_p + 2; loop_p++){
    // printf("%s,%d\n",loop_p->name,loop_p->age);
    // }
    // free(m_p);
    // system("pause");
    //}
    //8.typedef 类型取别名
    //8.1.不同的名称代表不同的事情
    //8.2 不同的情况下使用不同的别名
    //8.3 简洁
    //
    //struct Man
    //{
    // char name;
    // int age;
    //};
    //
    //typedef struct Women{
    // char name;
    // int age;
    //} W,
    WP;//w 是Women结构体别名,WP 是women结构体类型 指针类型的别名
    ////typedef struct Women w;
    ////typedef struct Women
    wp;
    //
    //
    ////结构体别名
    //typedef struct Man man;
    //typedef struct Man
    point_man;
    //typedef int jint;
    //typedef int
    point_int;
    //void main(){
    // jint t = 10;
    // point_int p_i = &t;
    //
    // //结构体变量
    // W w1 = { "rose", 20 };
    // //结构体指针
    // WP wp = &w1;
    // printf("%s,%d\n", w1.name, w1.age);
    //
    // printf("%s,%d\n", wp->name, wp->age);
    // printf("pause");
    //}
    //
    // 结构体函数指针成员
    //typedef struct Girl
    //{
    // char name;
    // int age;
    // //函数指针
    // int (
    sayHi)(char);
    //};// Girl 结构体类似于java中类,
    //
    //int sayHi(char
    name){
    // MessageBoxA(0,name,"titile",0);
    // return 1232323;
    //}
    //
    //void main(){
    // struct Girl g1;
    //
    // g1.age = 12;
    // g1.name = "chengyue";
    // g1.sayHi = sayHi;
    //
    // int i=g1.sayHi("wer");
    //
    // printf("%s,%d,%d\n", g1.name, g1.age,i);
    //
    // system("pause");
    //}

    typedef struct Girl
    {
    char name;
    int age;
    //函数指针
    int(
    sayHi)(char*);
    }Girl;// Girl 结构体名和 别名一样,

    typedef Girl* GirlP;

    //改名
    void rename(GirlP gp1){
    gp1->name="12wqe";
    }

    //联合体(共用体)
    //不同类型的变量 共同占用一段内存(想混覆盖),联合变量任何时刻只有一个成员存在,
    //目的是为了节省内存。
    //大小:联合体变量的大小=最大的成员所占的字节数

    //union Data
    //{
    // int x;
    // int y;
    // double z;
    //};
    //void main(){
    // union Data d1;
    // d1.x = 90;
    // d1.y = 100;//最后一次赋值有效
    // //d1.z = 12.3;
    // printf("%d,%d,%lf\n", d1.x, d1.y, d1.z);//100,100,-9255959211
    // system("pause");
    //}
    //枚举 固定的值
    enum Day
    {
    MonDay=1,
    Tuesday=2,
    Wednesday=3,
    };
    void main(){
    //枚举中的值必须是括号中的值
    enum Day d = MonDay;
    printf("%#x,%d", &d, d);

    int i = 0;
    enum Day *p = &d;
    
    system("pause");
    

    }

    相关文章

      网友评论

          本文标题:day04_结构体

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