NULL和void*

void *指针

1.无类型指针,指向一块实际存放数据的地址,但该地址存放的数据的类型不确定。可以指向任意类型的指针。

 如动态内存分配

void * memset ( void * buffer, int c, size_t num );
void * memcpy(void *dest, const void *src, size_t len);

 2.void类型指针指向的数据类型时不确定的,只是单纯的操作此内存块,并不关注该片内存是什么类型,所以在进行内存分配后,需要强制类型转换,在进行数据的存储

char*str=(char*)malloc(sizeof(char)*13);

3.void*赋值给其他指针时需要进行强制类型转换。但是任何数据类型的指针都可以直接赋值给void *。

void *arg;
int i;
i=(int *)arg;
void *p1;
int *p2;
p1 = p2;

4.void *指针不能进行算法操作,因为不清楚变量的类型,如:

void *p;
p++;            //错误
p = p + 1;      //错误  
int *p;
p++;              //正确

 

NULL指针

1.空指针实质上是有指向的指针,但它指向的地址是很小的地址,约定俗成为地址0。在c语言中NULL的定义为:#define NULL    ((void *)0)

显而易见,NULL转换成void * 类型,本来void * 类型是用来存放地址的,那么这里的0自然就是地址0了。

在内存分配方面,较小的地址是不用来存放数据的,也不允许程序访问的。所以,指针指向了它,就是这个指针不能操作它指向的这块较小的地址。

2.空指针有指向,但是它指向的地址是特殊的,该地址不允许存放数据和不允许程序访问,所以空指针不能操作该地址里的东西。所以能够防止误用。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值