结构体成员指针初始化
不可以正确运行的初始化方式(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; }
区别是,为整个结构体分配了内存,以及对结构体的指针成员进行了内存分配(指的是将这个指针指向一块合法的内存,不是为自身分配内存,自身内存已经在定义的时候由编译器分配了)
以后的编程习惯:结构体一定义,立马进行初始化内存分配。
时间: 2024-10-11 21:03:45