5分钟看懂什么是 malloc

关注公众号[不会编程的程序圆],看更多干货

对你有帮助,请不吝点个赞,点关注不迷路


初识 动态内存分配 [C语言必知必会]

动态内存分配的引入

初学数组的时候,有一个问题经常困扰着我,就是:我们可不可以自己在程序里定义一个数组的大小而不是在函数开头先声明一个很大的数组,然后仅仅使用它的一小部分?

请看下面的程序:
我们需要一个大小为 N ( N < 1000)的数组,我们通常这么写:

int main(void) {
   

	int arr[1000] = {
    0 };
	int N = 0;
	int i = 0;

	printf("请输入数组的大小\n");
	scanf("%d", &N);

	printf("请输入%d个数\n", N);
	for (i = 0; i < N; i++)
		scanf("%d", &arr[i]);

	return 0;
}

每次这么写我都觉得自己在绕远路,为什么就不能直接把输入的变量 N 当作数组的大小直接使用?
比如这样:arr[N],但是很遗憾,每次编译器都把你扼杀在程序编译之前!

C99才可以用变量做数组定义的大小
并且可以在程序中随时声明变量。(C99前我们需要在函数的最前面的区域对所有变量进行声明)

如果我不想用上面那种笨笨的办法,又没有支持C99的编译器,我该怎么办?

可以这么做:
int* arr = (int*)malloc(sizeof(int) * N)

sizeof(int) 代表数组中每个元素的类型
N 代表数组的元素个数

所以malloc的意义是向 堆区 要了一块sizeof(int) * N 这么大的空间

malloc 与 free ——好哥俩

malloc

头文件stdlib
原型void* malloc(size_t size)

  • 19
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值