# include<stdio.h>
# include<malloc.h>
void f(int ** q)
{
*q = (int *)malloc(sizeof(int));//sizeof(数据类型)返回值是该数据类型所占的字节
//等价于 p = (int *)malloc(int);
// *q = 5; // 等价于p = 5; p 只能存放整型变量的地址
** q = 5; // *p =5; 以 p 为地址的四个字节
}
int main(void)
{
int *p;
f(&p); //我们可以在一个函数里面(f函数)造出一个空间,在另一个函数(main函数)去使用
printf("p = %d\n", *p); //p指向的是 sizeof(int)这四个字节,这四个字节是动态分配的,动态分配的是在堆里面分配的,堆里面分配的在函数终止的时候不会释放
// 函数终止(内存释放)本身叫出栈,出栈不出栈跟动态内存没关系
// f 函数终止是 系统为main函数分配的动态内存还在
return 0;
}
# include<stdio.h>
# include<malloc.h>
void f(int ** q)
{
*q = (int *)malloc(sizeof(int));//sizeof(数据类型)返回值是该数据类型所占的字节
//等价于 p = (int *)malloc(int);
// *q = 5; // 等价于p = 5; p 只能存放整型变量的地址
** q = 5; // *p =5; 以 p 为地址的四个字节
}
int main(void)
{
int *p;
f(&p); //我们可以在一个函数里面(f函数)造出一个空间,在另一个函数(main函数)去使用
printf("p = %d\n", *p); //p指向的是 sizeof(int)这四个字节,这四个字节是动态分配的,动态分配的是在堆里面分配的,堆里面分配的在函数终止的时候不会释放
// 函数终止(内存释放)本身叫出栈,出栈不出栈跟动态内存没关系
// f 函数终止是 系统为main函数分配的动态内存还在
return 0;
}