標籤:
結構體成員指標初始化
不可以正確啟動並執行初始化方式(1):
#include <stdio.h>#include <string.h>#include <malloc.h>//#include "a.h"//char a[100];struct stu{ char* name; int num;}*pst,st;void init_pst(){ pst = (struct stu *)malloc(sizeof(struct stu)); //pst->name = (char*)malloc(sizeof(char*)); //pst->num = 0;}void free_pst(){ free(pst);}int main(void){ //strcpy(pst->name,"Jacy"); //pst->num = 99; init_pst(); //test(); strcpy(pst->name,"Jacy"); pst->num = 99; printf("%s %c",pst->name,pst->num); free_pst(); return 0;}
不可以正確啟動並執行初始化方式(2):
#include <stdio.h>#include <string.h>#include <malloc.h>//#include "a.h"//char a[100];struct stu{ char* name; int num;}*pst,st;void init_pst(){ NULL; //pst = (struct stu *)malloc(sizeof(struct stu)); //pst->name = (char*)malloc(sizeof(char*)); //pst->num = 0;}void free_pst(){ free(pst);}int main(void){ //strcpy(pst->name,"Jacy"); //pst->num = 99; init_pst(); //test(); strcpy(pst->name,"Jacy"); pst->num = 99; printf("%s %c",pst->name,pst->num); free_pst(); return 0;}
可以正確啟動並執行初始化方式:
#include <stdio.h>#include <string.h>#include <malloc.h>//#include "a.h"//char a[100];struct stu{ char* name; int num;}*pst,st;void init_pst(){ pst = (struct stu *)malloc(sizeof(struct stu)); pst->name = (char*)malloc(sizeof(char*)); pst->num = 0;}void free_pst(){ free(pst);}int main(void){ //strcpy(pst->name,"Jacy"); //pst->num = 99; init_pst(); //test(); strcpy(pst->name,"Jacy"); pst->num = 99; printf("%s %c",pst->name,pst->num); free_pst(); return 0;}
區別是,為整個結構體分配了記憶體,以及對結構體的指標成員進行了記憶體配置(指的是將這個指標指向一塊合法的記憶體,不是為自身分配記憶體,自身記憶體已經在定義的時候由編譯器分配了)
以後的編程習慣:結構體一定義,立馬進行初始化記憶體配置。
C Language Study - 結構體成員指標初始化