C语言-动态指针

栈区(stack area):内存由系统申请,在变量生命周期结束时由系统释放

堆区(heap area):由我们申请,自己释放,(malloc,realloc,calloc)

malloc

	int* p = (int*)malloc(sizeof(int)* 10);//int*是强制转换的类型,参数是申请空间的字节大小
	free(p);//释放
	p = NULL;//赋值空

//malloc和一维数组指针

	//malloc和一维数组指针
	int(*p)[5] = (int(*)[5])malloc(sizeof(int)* 5);
	int n[5];
	p = &n;
	
	*(*p + 0) = 1;
	*(*p + 1) = 2;
	*(*p + 2) = 3;
	*(*p + 3) = 4;
	*(*p + 4) = 5;

	for (int i = 0; i < 5; i++)
	{
		printf("%d\t", (*p)[i]);
	}

在这里插入图片描述

//malloc和二维数组指针

	//malloc和二维数组指针
	int(*p1)[2][3] = (int(*)[2][3])malloc(sizeof(int)* 6);
	int n1[2][3];
	p1 = &n1;

	(*p1)[0][0] = 1;
	(*p1)[0][1] = 2;
	(*p1)[0][2] = 3;
	(*p1)[1][0] = 4;
	(*p1)[1][1] = 5;
	(*p1)[1][2] = 6;

	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("%d\t", (*p1)[i][j]);
		}
		printf("\n");
	}

在这里插入图片描述

calloc

	//calloc
	int* p = (int*)calloc(5, 4);//5个元素 每个元素4字节  初始化为0
	for (int i = 0; i < 5; i++)
	{
		printf("%d\t", p[i]);
	}

在这里插入图片描述

//realloc

	//realloc  改变动态指针的大小(字节数)
	int *p = (int*)malloc(12);
	printf("%d\n", _msize(p));//_msize(p)  查看指针p的字节大小

	int *p1 = (int*)realloc(p, 10);//动态指针,修改后的字节数
	printf("%d\n", _msize(p));

在这里插入图片描述

扫描二维码关注公众号,回复: 4986889 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_43340991/article/details/86542991