void指针和NULL指针
内容介绍:
一、void指针
二、NULL指针
三、NULL不是NUL
一、void指针
字面意思就是无类型
void指针我们把它称之为通用指针,就是可以指向任意类型的数据。也就是说,任何类型的指针都可以赋值给void指针。
案例1:
#include <stdio .h>
int main( )
{
void a ;
return 0;
}
运行报错:
gcc test1.c && ./a.out
testl.c:1nFunction'main
test1.c :5:error: variable or field a decLared void
案例2;
#incLude <stdio. h>
int main( )
{
int num = 1024 ;
int *pi = #
char *ps = "FishC";
void *pv;
pv = pi;
printf("pi:%p, pv:%p\n", pi, pv);
pv = ps;
printf("ps:%p, pv:%p\n", pS, pv) ;
return 0;
}
运行:
gcc test2.c && ./a.out
结果:
0S8T08X0:Ad10S8t08x0d
OE8x0Ad0E28P4qx0:Td
说明这样取地址是可行的
#include <stdio.h>
int main( )
{
int num = 1024;
int *pi = &num ;
char *ps = "FishC" ;
void * pv;
pv = pi;
printf("pi:%p, pv:%p\n" ,pi, pv);
printf("pv:%d\n",*(int *)pv);
ps = (char *)pv;
pv = ps;
printf("ps:p,pv:ap\n",ps, pv) ;
printf("*pv:%s\n",(char *) pv) ;
return 0 ;
}
二、 NULL指针
定义null指针
#define NULL( (void*)0)
良好的编程习惯:
当你还不清楚要将指针初始化为什么地址时,请将它初始化NULL;在对指针进行解引用时,先检查该指针是否为NULL。这种策略可以为你今后编写大型程序节省大量的调试时间。
#include <stdio. h>
int main( )
{
int *p1;
int *p2 = NULL;
//巡控指针
printf("%d\n", *p1);
printf("%d\n", *p2);
return 0;
}
运行:
gcc test3.c && ./a.out
结果:
304989057
Segmentation fault
三、NULL不是NUL
NULL用于指针和对象,表示控制,指向一个不被使用的地址;而'\0'表示字符串的结尾。