C语言学习总结(二)----指针

本文深入解析C语言中的指针概念,包括指针、指针变量、变量指针的区别,探讨指针在内存寻址中的作用。文章详细介绍了字符指针、二级指针、指针常量、常量指针的用法,以及数组指针和指针数组的特性,最后讲解了指针的算术和关系运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针,指针变量,变量指针

指针: 内存单元的地址。
指针变量:存放地址(指针)的变量。
变量指针:变量的地址。
指针是一个无符号整数取值范围(0—2^32-1),由机器的寻址能力所决定,任何指针在32位机器平台下占4个字节,在64位平台下占8个字节,这个我们可以使用关键字sizeof(指针)来测试!
在这里插入图片描述

通常人们所讲的指针其实是指针变量,如定义一个指针,其实是定义一个指针变量。

为什么要有指针呢?

指针是C语言的灵魂!众所周知,数据是在内存中存放的,不同类型的数据所占字节数的多少不同,为了正确地访问这些数据,因此为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。简单来讲指针的作用就是快速准确定位和查找!

常见的指针类型

字符指针:两种用法:
1.单个字符的地址

int main()
{
	char ch = 'h';
	char* pch = &ch;
	return 0;
}

2.字符串首元素的地址

int main()
{
	char* str = "hello";//str中保存的是首元素h的地址
	return 0;
}

二级指针 (指针的指针)

int main()
{
	int a = 3;
	int* pa = &a;    //一级指针
	int** ppa = &pa; //二级指针
	return 0;
}

在这里插入图片描述
注:有二级指针自然也有三级指针,四级指针,把这些指针统称为多级指针!

指针常量与常量指针

指针常量:指针类型的常量。本质是一个常量,指针的值不能被修改,但指针指向的对象的内容可以被修改。

int main()
{
	int a = 3;
	int b = 1;
	int* const p = &a;
	*p = 5;    //正确,p是一个常量,但*p不是,可以作为左值
	p = &b;    //错误,左值不能是常量,或者说p是常量值不能被修改
	return 0;
}

常量指针:指向常量的指针。本质是一个指针,指针的值可以被修改,但指针指向的对象的内容不能被修改。

int main()
{
	int a = 3;
	int b = 1;
	int const *p = &a;
	*p = 5;    //错误,*p是一个常量,不能写入
	p = &b;    //正确
	return 0;
}

当两者同时被const修饰呢?正如所料,p和*p的值都不能被更改!

int main()
{
	int a = 3;
	int b = 1;
	int const * const p = &a;
	*p = 5;    //错误,*p是一个常量,不能写入
	p = &b;    //错误,p也是一个常量
	return 0;
}

如何区分呢?
主要看const修饰的是谁!简便方法:去掉类型和变量名 将const读作常量,*读作指针就OK了!
小问题:数组名属于哪一个呢?

数组指针和指针数组
数组指针:本质是一个指针,不过是指向一个数组的指针!大小自然也是4个字节!
指针数组:本质是一个数组:数组的每一个元素都是指针类型,这里的指针类型指的是同一种指针类型,毕竟数组是同一种类型元素的集合体!
int main()
{
	int *p1[10];
	int(*p2)[10];
	return 0;
}

上面哪个是数组指针呢?
当然是int(* p2)[10];原因是这样的,虽然下标引用操作符的优先级高于解引用,但是()使得p2先和 结合使得p2成为一个指针,并且这个指针指向一个含有十个整型元素的数组。因此它是一个数组指针。
int
p2[10]呢?它是一个指针数组,首先p2先和[]结合使得其成为一个数组,数组中的每个元素的类型都是int*类型的,因此它是一个指针数组!

指针运算

算术运算:对指针进行加一或减一操作可不是 简单的进行加一或者减一。对指针加一,其实加的是其指向的类型的大小,如给整型指针加一等于加四,给字符型指针加一等于加一,给数组指针加一,等于加一个数组的大小…
在这里插入图片描述

arr为数组名,是数组首元素的地址,即是一个整型指针,因此它加一等于加四,即指向arr[1],&arr是整个数组的地址,即是一个数组指针,因此它加一等于加sizeof(arr)=20,所以它直接越过整个数组的大小,指向下一个数组的首元素。
指针减指针只有当两个指针同时指向同一个数组时,才允许指针减指针,减去的结果是一个有符号整数,代表两个指针之间元素的个数。
在这里插入图片描述
关系运算:指针可以进行的关系运算有< <= == >= !=
注:关系运算得前提是两个指针指向同一个数组,否则计算是没有任何意义的!

int main()
{
	int arr[5];
	int* p = arr;
	for (; p < &arr[5]; p++)
	{
		*p = 0;
	}
	return 0;
}
int main()
{
	int arr[5];
	int* p = arr+4;
	for (; p >= &arr[0];p--)
	{
		*p = 0;
	}
	return 0;
}

其实第二段代码存在一个问题,标准规定,指向数组的指针可以与指向数组最后一个元素后面的第一个位置的内存的指针相比较,但不允许与其首元素前面的内存空间的指针相比较!

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值