【C】malloc动态分配内存

一维数组

#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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值