小甲鱼 P25 void指针和NULL指针

小甲鱼 P25 void指针和NULL指针

  • void指针(尽量避免使用,容易出错)

void指针:通用指针。就是可以指向任意类型的数据,也就是说,任何类型的指针都可以赋值给void指针

#include <stdio.h>

int main(void)
{
	int num = 1024;
	int *pi = &num;
	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 = &num;
	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指针解引用是非法的
}

猜你喜欢

转载自blog.csdn.net/xiaodingqq/article/details/82821807