0211嵌入式C语言学习

指针

指针是一种数据类型,它可以定义变量,变量保存的值是地址,由于地址是固定长度,所以指针变量的长度是固定的;不同地址的步长不一样,需要不同指针类型的变量来保存

*:间接运算符

&:取地址运算符(对应的内存空间,指向的内存空间)

(“&”和“*”都是右结合的。假设有变量 x = 10,则*&x 的含义是,先获取变量 x 的地址,再获取地址中的内容。因为“&”和“*”互为逆运算,所以 x = *&x。)

p++:p对应的地址自加

(*p)++:p指向的地址的内容进行自加

什么时候使用多级指针?

应用场景:函数传参

野指针

a)什么是野指针?

定义未初始化指针

释放结束之后指针

越界访问的指针

如: char *p

野指针:指针变量里内存的地址对应空间无访问权限(指针变量所指向空间无访问权限)

b)野指针产生的问题?

内存泄漏---运行时错误---内存错误(段错误)

c)野指针的注意事项:

1、指针指向常量存储区对象

2、资源泄露

3、内存越界

4、返回值是指针

5、指针做形参

d)如何避免野指针?

养成良好的编码习惯:

1)定义指针变量时必须初始化:

当指针变量作为指向工具时,定义时初始化为NULL;

当向指针变量指向的空间赋值时,需要给动态申请空间

2)使用时:

检查内存空间是否分配成功

初始化内存空间

防止越界访问

3)使用结束时:

必须要释放空间

释放之后一定要将指针再次初始化为NULL

NULL:#define NULL (void *)0

NULL代表的是0地址(不能访问,不能储存数据段)

char *p = NULL;//EOF

注意:野指针不能杜绝,只能避免!!!

malloc、free、calloc、realloc:

a)malloc:

void * malloc(size_t size);

这个函数可以再堆区上开辟内存连续可用的空间:

如果开辟成功,则返回一个指向开辟好空间的指针

如果开辟失败,则返回NULL指针,因此malloc的返回值一定要做检查

由于返回值的类型是void *,所以malloc函数并不知道开辟空间的类型

具体在使用的时候由使用者自己来决定

如果参数size为0,malloc的行为的标准是未定义的,取决于编译器

b)free:

void free(void * ptr);

如果参数ptr指向的空间不是动态开辟的,那么free函数的行为是未定义的

如果参数ptr是NULL指针,则函数什么是都不用做

c)calloc:

void * callloc(size_t num,size_t size);

calloc与malloc的开辟方式唯一的不同点是在开辟内存的同时初始化

d)realloc:

void * realloc(void * ptr,size_t size);

realloc函数可以对动态开辟内存大小的调整

ptr是要调整的内存地址size调整之后新大小返回值为调整之后的内存其实位置

这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间:

1)原有空间之后有足够大的空间

2)原有空间之后没有足够大的空间

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值