开发者学堂课程【你的第一门C语言课: void 指针和 NULL 指针】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/444/detail/5475
void 指针和 NULL 指针
内容介绍:
一、void 指针
二、NULL 指针
三、NULL 不是 NUL
一、void 指针
字面意思就是无类型
void 指针我们把它称之为通用指针,就是可以指向任意类型的数据。也就是说,任何类型的指针都可以赋值给 void 指针。
案例1:
#include
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
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
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
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'表示字符串的结尾。