小甲鱼 P25 void指针和NULL指针
- void指针(尽量避免使用,容易出错)
void指针:通用指针。就是可以指向任意类型的数据,也就是说,任何类型的指针都可以赋值给void指针
#include <stdio.h>
int main(void)
{
int num = 1024;
int *pi = #
char *ps = "Happy";
void *pv;
pv = pi;
printf("pi:%p, pv:%p\n", pi, pv);
pv = ps;
printf("ps:%p, pv:%p\n", ps, pv);
return 0;
}
结果:
- 不要对void指针解引用,编译器搞不懂指向的数据是什么
字符串指针,打印时,不用解引用!!
(PS:字符串在C语言中规定,只需要指向字符串的起始地址,然后它就会一个字节一个字节地读下去,直到读到'\0',表示字符串的结束)
#include <stdio.h>
int main(void)
{
int num = 1024;
int *pi = #
char *ps = "Happy";
void *pv;
pv = pi;
printf("pi:%p, pv:%p\n", pi, pv);
printf("*pv:%d\n", *(int *)pv);
pv = ps;
printf("ps:%p, pv:%p\n", ps, pv);
printf("*pv:%s\n", (char *)pv);//字符串指针,打印时,不用解引用
return 0;
}
结果:
- NULL指针
NULL空指针:一个指针,不指向任何数据,指向一个不被使用的地址
#define NULL((void *)0)
当你还不清楚要将指针初始化什么地址时,请将它初始化NULL
#include <stdio.h>
int main()
{
int *p1;
int *p2 = NULL;
printf("%d\n", *p1);//野指针,悬空指针,迷途指针
printf("%d\n", *p2);//对一个NULL指针解引用是非法的
}