鸟语天空
动态分配内存calloc()
post by:追风剑情 2019-11-26 20:46

       和malloc()类似,在ANSI之前,calloc()也返回指向char的指针;在ANSI之后,返回指向void的指针。如果要储存不同的类型,应使用强制类型转换运算符。calloc()函数接受两个无符号整数作为参数(ANSI规定是size_t类型)。第1个参数是所需的存储单元数量,第2个参数是存储单元的大小(以字节为单位)。calloc()函数还有一个特性:它把块中的所有位都设置为0(注意,在某些硬件系统中,不是把所有位都设置为0来表示浮点数0)。free()函数也可用于释放calloc()分配的内存。动态内存分配是许多高级程序设计技巧的关键。有些编译器可能还提供其他内存管理函数,有些可以移植,有些不可以。

示例

//Visual Studio中加上这句才可以使用scanf()
//否则只能使用scanf_s()
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//malloc()、free()
#include <stdlib.h>

//argc: 参数个数 argv[]: 参数数组
//int main(int argc, char **argv)
int main(int argc, char *argv[])
{
	long * newmem;
	newmem = (long *)calloc(10, sizeof(long));
	for (int i = 0; i < 10; i++)
		newmem[i] = i;

	for (int i = 0; i < 10; i++)
		printf("%ld ", newmem[i]);

	putchar('\n');

	for (int i = 0; i < 10; i++)
		*(newmem + i) = i + 10;

	for (int i = 0; i < 10; i++)
		printf("%ld ", newmem[i]);

	free(newmem);

	putchar('\n');
	system("pause");
	return 0;
}


运行测试
111.png

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容