C语言——void指针、NULL指针、指向指针的指针、

家电维修 2023-07-16 19:16www.caominkang.com家电维修技术

目录

一、void指针

二、NULL指针

三、指向指针的指针

1.指向指针的指针

2.指针数组和指向指针的指针

四、常量和指针

1.常量

2.指向常量的指针

3.常量指针

4.指向“指向常量的常量指针”的指针


一、void指针
  • void指针我们把它称之为通用指针,就是可以指向任意类型的数据。也就是说,任何类型的指针都可以赋值给void指针。

代码举例:

#include 

int main()
{
	int num = 1024;
	int pi = #
	char ps = "LoveC";
	void pv;
	
	pv = pi;
	printf("pi: %p, pv: %pn", pi, pv);
	
	pv = ps;
	printf("ps: %p, pv: %pn", ps, pv);
	
	
	return 0;
	
}

运行结果

二、NULL指针
  • 在C语言中,如果一个指针不指向任何数据,则称之为空指针,用NULL来表示。
    #define NULL ((void )0)
  • 当不清楚要将指针初始化为什么地址时,请将它初始化NULL;在对指针进行解引用时,先检查该指针是否为NULL。这种策略可以为今后编写大型程序节省大量的调试时间。
  • NULL不是NULNULL用于指针和对象,表示控制,指向一个不被使用的地址;而‘‘’表示字符串的结尾。

三、指向指针的指针

1.指向指针的指针

 代码举例

#include 

int main()
{
	int num = 520;
	int p = #
	int pp = &p;
	
	printf("num: %dn", num);
	printf("p: %dn", p);
	printf("pp: %dn", pp);
	
	printf("&p: %p,pp: %pn", &p,pp);
	printf("&num: %p,p: %p, pp: %pn", &num, p, pp);
	
	return 0;
}

运行结果

2.指针数组和指向指针的指针
  • 至少有两个好处① 避免重复分配内存;② 只需要进行一处修改
  • 代码的灵活性和安全性都有了显著提高

代码举例

#include 

int main()
{
	char cBooks[] = {
		"",
		"",
		"",
		"",
		"",
		"<带你学C带你飞>"};
	
	char byFishC;
	char jiayuLoves[4];
	int i;
	 
	byFishC = &cBooks[5];
	jiayuLoves[0] = &cBooks[0];
	jiayuLoves[1] = &cBooks[1];
	jiayuLoves[2] = &cBooks[2];
	jiayuLoves[3] = &cBooks[3];
	
	printf("FishC出版的图书有 %sn", byFishC);
	printf("小甲鱼喜欢的图书有 n");
	
	for(i = 0;i< 4;i++)
	{
		printf("%sn", jiayuLoves[i]);
	}
	
	return 0;
}

运行结果

四、常量和指针

1.常量
  • 常量应该是这样520,'a',3.14
  • 或者这样
#define PRICE 520
#define A'a'
#define PI 3.14
  • 还可以使用const关键字修饰,把变量变成只读,不可写入不可修改
const int price = 520;
const char a = 'a';
const float pi = 3.14;

2.指向常量的指针
  • 指针可以修改为指向不同的常量
  • 指针可以修改为指向不同的变量
  • 可以通过解引用来读取指针指向的数据
  • 不可以通过解引用修改指针指向的数据

代码举例

#include 

int main()
{
	int num = 520;
	const int um = 880;
	const int pc = &um;
	
	printf("um:%d,&um:%pn",um,&um);
	printf("pc:%d,pc:%pn",pc,pc);
	
	pc = #
	printf("num:%d,&num:%pn",num,&num);
	printf("pc:%d,pc:%pn",pc,pc);
	
	num = 1024;
	printf("pc:%d,pc:%pn",pc,pc);
	
	return 0;
}

运行结果

3.常量指针

(1)指向非常量的常量指针

  • 指针自身不可以被修改
  • 指针指向的值可以被修改

(2)指向常量的常量指针

  • 指针自身不可以被修改
  • 指针指向的值也不可以被修改

代码举例

#include 

int main()
{
	int num = 520;
	const int um = 880;
	const int  const p = #
	
	//不可被修改,不能执行
//	p = 1024;
//	printf("p: %dn",p);
	
	//不可被修改,不能执行 
//	p = &um;
//	printf("p: %dn",p);
	
	num = 1024;
	printf("p: %dn",p);
	
	return 0;
}

运行结果

4.指向“指向常量的常量指针”的指针

代码举例

#include 

int main()
{
	int num = 520;
	const int um = 880;
	const int  const p = #
	const int  const pp = &p;
	
	printf("pp: %p,&p: %pn",pp,&p);
	printf("pp: %p, p: %p, &num: %pn",pp,p,&num);
	printf("pp: %d, p: %d, num: %dn",pp,p, num);

	return 0;
}

运行结果

Copyright © 2016-2025 www.jianfeikang.com 建飞家电维修 版权所有 Power by