动态内存可以跨函数使用
程序没有逻辑错误,因为子函数所占用的内存是动态分配的,存储在堆,而不是栈,静态内存之所以丢失是因为函数执行完毕要出栈,堆是手动分配的,函数执行完毕没有free就一直存在,所以p所指向空间不会丢失。
1 #include<stdio.h> 2 #include<malloc.h> 3 struct Student 4 { 5 int sid; 6 int age; 7 }; 8 //函数声明 9 struct Student * CreateStudent(); 10 void ShowStudent(struct Student *); 11 12 int main(void) 13 { 14 struct Student * ps;//定义了一个ps变量,存储struct Student类型变量地址 15 ps = CreateStudent(); 16 ShowStudent(ps); 17 18 return 0; 19 } 20 //子函数 21 struct Student * CreateStudent(void) 22 { 23 struct Student * p = (struct Student *)malloc(sizeof(struct Student)); 24 p->sid=102; 25 p->age=10; 26 return p; 27 } 28 void ShowStudent(struct Student * pst) 29 { 30 printf("%d,%d\n",(*pst).sid,(*pst).age); 31 //printf("%d,%d",pst->sid,pst->age); 32 }
YKJIAO