栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言——void指针、NULL指针、指向指针的指针、常量和指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言——void指针、NULL指针、指向指针的指针、常量和指针

目录

一、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不是NUL:NULL用于指针和对象,表示控制,指向一个不被使用的地址;而‘‘’表示字符串的结尾。

三、指向指针的指针

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 cnum = 880;
	const int *pc = &cnum;
	
	printf("cnum:%d,&cnum:%pn",cnum,&cnum);
	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 cnum = 880;
	const int * const p = #
	
	//不可被修改,不能执行
//	*p = 1024;
//	printf("*p: %dn",*p);
	
	//不可被修改,不能执行 
//	p = &cnum;
//	printf("*p: %dn",*p);
	
	num = 1024;
	printf("*p: %dn",*p);
	
	return 0;
}

运行结果:

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

代码举例:

#include 

int main()
{
	int num = 520;
	const int cnum = 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;
}

运行结果:

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1038163.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号