結構體中指針


結構體中帶有指針的情況

#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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM