一维数组
#include <stdio.h>
#include <malloc.h>
int main() {
int a[5] = { 1, 2, 3, 4, 5 }; //静态分配数组
int length;
printf("请输入你需要分配的数组长度:");
scanf("%d", &length);
int* pArr = (int*)malloc(sizeof(int) * length);
//malloc为分配内存的函数,返回第一个字节的地址,但是默认返回是一个干地址(无法知道地址代表的是几个字节的地址),没有实际意义,必须加强制类型转换为指定的指针类型才有意义,(int *)表示强转为int类型的指针。
/*
//我们可以把pArr当作一个普通的数组来使用
*pArr = 10; //类似于a[0] = 10;
pArr[1] = 20; //类似于a[1] = 20;
cout << *pArr << "\n" << pArr[1];
*/
free(pArr); //把pArr所代表的动态分配的内存释放
return 0;
}
跨函数使用内存
静态调用函数时,在函数调用结束后,占用的内存会自动释放。
要想跨函数使用内存,而内存不会自动释放,可以通过malloc函数。
main() {
int* p;
fun(&p);
...
}
int fun(int** q) {
*q = (int* )malloc(4); //动态分配内存时,函数执行结束后占用内存不会消失,必须手动释放
}
一个例子
# include <stdio.h>
# include <malloc.h>
struct Student {
int sid;
int age;
};
struct Student* CreateStudent(void);
void ShowStudent(struct Student*);
int main(void){
struct Student* ps;
ps = CreateStudent();
ShowStudent(ps);
return 0;
}
void ShowStudent(struct Student* pst){
printf("%d %d", pst->sid, pst->age);
}
struct Student* CreateStudent(void){
struct Student* p = (struct Student*)malloc(sizeof(struct Student));
p->sid = 99;
p->age = 88;
return p;
}