Void指针和NULL指针
Void指针:
Void指针我们称之为通用指针,就是可以指向任意类型的数据。也就是说,任何类型的指针都可以赋值给Void指针。
举例:
#include<stdio.h>
int main ()
{
int num = 666;//这里定义为整型
int *pi = #
char *ps = "I love XYT";//这里为字符型
void *pv;
pv = pi;//将整型赋值void指针
printf("pi:%p, pv:%p
", pi, pv);
pv = ps; //将字符型赋值给void指针
printf("ps:%p, pv:%p
", ps, pv);
//最后的结果是两个地址一样,可以正常赋值过去
return 0;
}
无类型指针没办法进行解引用,所以可以强制转换
例子:
#include<stdio.h>
int main ()
{
int num = 520;//这里定义为整型
int *pi = #
char *ps = "I love XYT";//这里为字符型
void *pv;
pv = pi;
printf("pi:%p, pv:%p
", pi, pv);
printf("pv:%d
", *(int *)pv);//这里为强制转换
pv = ps;
printf("ps:%p, pv:%p
", ps, pv);
rintf("pv:%d
", (char *)pv);//这里为强制转换,没有*是因为打印字符串不需要
return 0;
}
需要注意:使用void指针,不到必要的时候,不要乱用
NULL指针
如果一个指针不指向任何数据我们称之为空指针,也叫NULL指针。
为什么要用到NULL指针呢,当你还不清楚要将指针初始化为什么地址时,请将它初始化为NULL;在对指针进行解引用时,先检查该指针是否为NULL指针(用if),
#include<stdio.h>
int main ()
{
int *p1;
int *p2 = NULL;
printf("%d
" *p1);
printf("%d
" *p2);
return 0;
}
p1这种指针没有什么具体数据的,会乱指一气,我们称为野指针或者迷途指针
若对其解引用,如果地址是合法的,就会得到随机的值
使用NULL指针的话,就会很好解决这个问题
对NULL指针进行解引用的时候,就会出现非法警告