C语言-void指针和NULL指针

  • 2020-10-03
  • 0
  • 0

一、void指针

void:无类型

1.不能定义无类型的变量

2.定义无类型指针:

任何类型的指针都可以转换成无类型的指针

#include <stdio.h>
int main()
{
	int num = 1024;
	int *pi = #
	char *ps = "Mr.Wang";
	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指针进行解引用,因为不知道变量类型长度。

#include <stdio.h>
int main()
{
	int num = 1024;
	int *pi = #
	char *ps = "Mr.Wang";
	void *pv;

	pv = pi;
	printf("pi: %p, pv: %p\n", pi, pv);
	printf("*pv: %d\n", *pv);
	
	pv = ps;
	printf("ps: %p, pv: %p\n", ps, pv);
	printf("*pv: %s\n", pv);


	return 0;
}
对void指针解引用出现了错误

正确做法:

#include <stdio.h>
int main()
{
	int num = 1024;
	int *pi = #
	char *ps = "Mr.Wang";
	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;
}

3.void指针很危险,使用时要格外小心。

二、NULL指针

1.NULL指针:不指向任何东西

2.当你还不知你的指针要指向什么地址时就将指针指向NULL在对指针进行解引用时,先检查指针是否为NULL。

3.NULL不是NUL

4.NULL用于指针和对象,表示控制,指向一个不被使用的地址;而’\0’表示字符串的结尾

评论

还没有任何评论,你来说两句吧