结构体中指针

结构体中带有指针的情况

复制代码
#include<stdio.h>

struct man
{
    char *name;
    int age;
};

int main()
{
    struct man m = {"tom",20};
    printf("name = %s, age = %d\n",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\n",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\n",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\n",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\n",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

posted @   王清河  阅读(5438)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2018-07-14 1066 Root of AVL Tree (25)
点击右上角即可分享
微信分享提示