Day19 二级指针 malloc动态申请空间大小 colloc动态申请空间大小 realloc重新申请空间大小 指针易混淆的问题

1. 二级指针

二级指针是指针的指针

int **p;//定义一个二级指针
int *q[10]; //定义一个指针数组,数组中每个元素是一个指针

 可以定义一个指针数组,每个元素分别指向一个数组的地址,

	for(int i = 0; i < 10; i++)
	{
		q[i] = &arr[i];	
	} 

2.malloc动态申请空间大小 

malloc可以动态申请一个空间大小,

p = (类型*)malloc(sizeof(int) * 10)

就可以申请一个10个int空间大小的空间

用malloc后需要用memset()对空间进行初始化

	memset(p, 0, 40);

对每一个空间的值进行初始化,赋上0

记得用完这个空间后需要释放空间,否则可能出现内存泄漏

free(p);

最后要将p指向NULL成为一个空指针,要不就变成了野指针,发生不可预期的错误

3. colloc动态分配空间

用法和malloc类似,只不过在申请的时候已经为空间清零了

定义方式:

	p = (类型 *)calloc(元素个数, sizeof(类型));

这个方式和malloc和mement一起用等价,后面的使用方法也相同(释放空间,指针指向NULL)

4.realloc重新分配空间大小

之前申请了空间,觉得空间不够,可以再申请一些空间,就用到了realloc函数

p = realloc(要为那个地址申请空间, 空间大小);

申请完后,之前的空间会被自动释放

总结:

这是一些容易记混的概念

(1)a是一个一维数组的首地址,a+1的意思是指针指向后一个元素的地址

(2)b是一个二维数组,b+1的意思是指针指向下一行的元素首地址,如果是&b+1,他就是将指针移到二维数组的后面,挪了整个数组

(3)sizeof(数组名),这个是计算出整个数组的大小

(4)sizeof(二维数组的地址)这个意思是二维数组一行占的大小

(5)sizeof(一个值的地址)计算的是地址占空间大小,与系统位数有关64位系统是8个字节,32位系统是4个字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值