动态内存可以跨函数使用

 程序没有逻辑错误,因为子函数所占用的内存是动态分配的,存储在堆,而不是栈,静态内存之所以丢失是因为函数执行完毕要出栈,堆是手动分配的,函数执行完毕没有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
",(*pst).sid,(*pst).age);
31     //printf("%d,%d",pst->sid,pst->age);
32 }
原文地址:https://www.cnblogs.com/ajiaoa/p/14004254.html