zoukankan      html  css  js  c++  java
  • 结构体中指针

    结构体中带有指针的情况

    #include<stdio.h>
    
    struct man
    {
        char *name;
        int age;
    };
    
    int main()
    {
        struct man m = {"tom",20};
        printf("name = %s, age = %d
    ",m.name,m.age);
        return 0;
    }

    运行结果:

    exbot@ubuntu:~/wangqinghe/C/20190714$ gcc struct.c -o struct

    exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct

    name = tom, age = 20

    如果修改m.name的值

    #include<stdio.h>
    #include<string.h>
    
    struct man
    {
        char *name;
        int age;
    };
    
    int main()
    {
        struct man m = {"tom",20};
        strcpy(m.name,"mike");
        printf("name = %s, age = %d
    ",m.name,m.age);
        return 0;
    }

    exbot@ubuntu:~/wangqinghe/C/20190714$ gcc struct.c -o struct

    exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct

    段错误 (核心已转储)

    会出现以上错误。

    将指针改位数组:

    #include<stdio.h>
    #include<string.h>
    
    struct man
    {
        char name[256];
        int age;
    };
    
    int main()
    {
        struct man m = {"tom",20};
        strcpy(m.name,"mike");
        printf("name = %s, age = %d
    ",m.name,m.age);
        return 0;
    }

    编译运行:

    exbot@ubuntu:~/wangqinghe/C/20190714$ gcc struct.c -o struct

    exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct

    name = mike, age = 20

    分析:

    常量内存中的数值是不能修改的。

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    struct man
    {
        char *name;
        int age;
    };
    
    int main()
    {
        //struct man m = {"tom",20};
        struct man m;
        m.name = malloc(sizeof(char) * 100);
        m.age = 20;
        strcpy(m.name,"mike");
        printf("name = %s, age = %d
    ",m.name,m.age);
        return 0;
    }

    编译运行:

    exbot@ubuntu:~/wangqinghe/C/20190714$ gcc struct.c -o struct

    exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct

    name = mike, age = 20

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    struct man
    {
        char *name;
        int age;
    };
    
    int main()
    {
        struct man *p = malloc(sizeof(struct man));
        p->name = malloc(sizeof(char) * 100);
        strcpy(p->name,"tom");
        p->age = 30;
        printf("name = %s, age = %d
    ",p->name,p->age);
        free(p->name);
        free(p);
        return 0;
    }

    指针在内存的存储方式:

    exbot@ubuntu:~/wangqinghe/C/20190714$ gcc struct.c -o struct

    exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct

    name = tom, age = 30

    END

  • 相关阅读:
    同表自更新
    C#数据层添加事务功能
    Mysql 索引 分区 面试题
    Spring 循环依赖
    Zipkin初探 + 与SpringBoot的集成+ 使用HTTP方式传送数据给zipkin server
    Web调优之IBM JDK+liberty(二),原来都是UUID惹得祸
    Web调优之IBM JDK+liberty(一): Jmeter pod里压,50个线程并发测试,调整 -Xms -Xms, Log原来是大问题
    Linux使用jstat命令查看jvm的GC情况
    VM内存回收System.gc()
    prometheus 文档合集
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11183110.html
Copyright © 2011-2022 走看看