结构体中指针
結(jié)構(gòu)體中帶有指針的情況
#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; }運行結(jié)果:
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
段錯誤 (核心已轉(zhuǎn)儲)
?
會出現(xiàn)以上錯誤。
?
將指針改位數(shù)組:
#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
?
分析:
常量內(nèi)存中的數(shù)值是不能修改的。
#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; }指針在內(nèi)存的存儲方式:
exbot@ubuntu:~/wangqinghe/C/20190714$ gcc struct.c -o struct
exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct
name = tom, age = 30
?
END
轉(zhuǎn)載于:https://www.cnblogs.com/wanghao-boke/p/11183110.html
總結(jié)
- 上一篇: 指定结构体元素的位字段
- 下一篇: 成都欢乐谷年卡多少钱