指针和数组

本文深入讲解了指针的基本概念,包括一级指针、二级指针、指针数组和数组指针的区别与应用。通过实例代码,详细解释了如何使用指针进行变量地址的存储和访问,以及二级指针在保存一级指针地址上的作用。

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

指针

  指针是用来保存变量地址的变量,在32位操作系统下指针有4个字节,而在64位操作系统下指针有8个字节
   指针保存的地址与该地址对应的变量间的关系就好比钥匙之于锁,门牌号之于房间, 我们可以通过钥匙打开相应的锁,通过门牌号找到对应的房间
   通过指针与变量之间的关系特点,我们可以通过操作指针实现各种应用,具体应用可以在其他地方找到
   下面主要是关于一级指针;二级指针;指针数组和数组指针的理解

一级指针

   下面看一段简单的代码

int main()
{
	int a = 10;
	int *pa = &a;//取a的地址并赋给指针pa
	printf("%p\n", &a);//打印a的地址
	printf("%p\n", pa);//pa的内容是a的地址
	printf("%d\n",*pa);//*解引用得到a,此时*pa就是a
	printf("%d\n", a);//打印a的值
	system("pause");
	return 0;
}

在这里插入图片描述

二级指针

   一级指针的值是地址,这个地址做为一个值亦需要空间来存放,是空间就具有地址 ,二级指针就可以保存一级指针的地址,也可看做地址的地址
   二级指针分为两类:
   1.指向指针变量的指针:

在这里插入图片描述

int main()
{
	int a = 10;
	int *pa = &a;//取a的地址并赋给指针pa
	int **ppa = &pa;//取一级指针pa的地址并赋给二级指针ppa
	//下面这三条语句都打印a的地址
	printf("%p\n", &a);//打印a的地址
	printf("%p\n", pa);//打印pa的内容
	printf("%p\n", *ppa);//打印ppa解引用后的内容
	//下面这两条语句都打印pa的地址
	printf("%p\n", &pa);//打印pa的地址
	printf("%p\n",ppa);//打印ppa的内容
	//下面这三条语句都打印10
	printf("%d\n", a);
	printf("%d\n",*pa);//*解引用得到a,此时*pa就是a
	//ppa两次解引用得到a,第一次解引用得到pa的内容,也即是a的地址
	//第二次解引用得到a的内容,也就是10
	printf("%d\n", *(*ppa));//根据操作符优先级这里括号可省略
	system("pause");
	return 0;
}

输出显示:
在这里插入图片描述
   2.指向数组的指针:
   在C语言中,数组与其它变量在使用上有很大的不同.无论是字符型、整型、实型变量,还是结构体类型或者指针类型的变量,语句中出现变量名都代表对该变量所在内存单元的访问,变量名代表整个变量在内存中的存储单元,可以向该变量赋值,也可以从中取出数据使用.但是定义一个数组之后,数组名并不代表整个数组所占据的内存单元,而是代表数组首元素的地址

指针数组&数组指针

   指针数组是一个数组,数组元素由指针组成:
   它有5个指针类型的数组元素。这里执行b+1时,则b指向下一个数组元素

int main()
{
	//这是一个指针数组
	//此数组里的每一个元素都是字符串,可以用指针数组来保存
	//其中每个元素都隐式转化为指针
	char *b[5] = { "aaa","bbb","ccc","ddd","eee" };
}

   数组指针是一个指针,指针指向一个数组:
   b是一个指针,指向一个字符型的一维数组,这个一维数组的长度是5,也是b的步长。也就是说执行b+1时,b要跨过5个字符型数据的长度

int main()
{
	char a[5];
	//b是一个数组指针,该指针指向一个含有5个元素的数组
	char(*b)[5] = &a;//注意这里的括号
	printf("%p\n", b);
	printf("%p\n", &a);
}

输出结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值