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

  • 相关阅读:
    【webrtc】PTCPeerConnection(28)
    windows传文件到linux服务器--- secureCRT PK xftp
    Navicat premium查看数据库表中文注释的两种方式
    Jmeter 5.1实现图片上传接口测试
    查看服务器内存、CPU、网络等占用情况的命令--汇总
    AWS服务器上安全组端口设置和访问的问题
    linux服务器时间乱码问题解决
    连接linux的几款工具 简介
    服务器上build.xml文件乱码解决(亲测有效)
    jmeter通过ant执行时报错 jmeter.log not found
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11183110.html
Copyright © 2011-2022 走看看