結構體中帶有指針的情況
#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