C/C++中指针的含义以及函数参数定义中指针传参和引用传参的区别

C++中的指针一直是学习的难点,本文将会详细讲述指针的含义以及函数使用指针传参的作用,同时也会介绍函数引用 (Cite) 传参的作用。

        指针是C++编程中一个核心的概念,它提供了一种访问和操作内存的方式,使得程序员能够更灵活地处理数据。指针是一种变量,其值是另一个数据的地址。这意味着通过指针,程序可以直接访问和操作存储在特定内存地址的数据。下面给出指针存地址信息的一个案例。

# include <iostream>

int main()
{
	
	int a = 1;
	int* ptr = &a;
	std::cout << ptr << std::endl;

}

        运行上面的代码,我们可以得到ptr这个指针变量的值,是a变量的内存地址。如下:

        通过访问指针变量ptr的值,即访问0095F72C这个内存地址存的数值,可以发现,这个内存地址存放的数值实际上是变量a的值。如下: 

         实际上还可以知道编译器是大端存储的方式,在这里,每一组数据2个数代表一个字节,我们知道,一个字节由8个比特组成,每个十六进制数字表示4个比特,所以cc在这里表示的是两个十六进制数字,即8个比特,也就是一个字节。

        好了,回归正题,我们现在知道指针变量ptr的值是变量a的内存地址,那指针变量ptr是如何存储的呢,实际上指针变量ptr也有自己的内存地址,而不是凭空出现,指针的作用只是存放其他变量的内存地址,而指针变量也有自己的内存地址,仅仅而已

        通过略微修改上面的代码,即可以发现 双指针变量ptr_new存放的值是指针变量ptr的内存地址。此处我们会发现ptr的值变化了,实际上不用太注重这个变化,因为重新编译,编译器重新给a分配了内存地址存放数据,所以会引起指针变量ptr的变化。这里小声说一下,实际上第一次和第二次指针变量ptr的存储内存地址也发生了变化,只是第一次我们并没有打印出来ptr的内存地址,所以观察不到两次的变化。

讲完了指针的含义,下面我们会讨论一下指针参数在函数中的应用。

# include <iostream>

void test(int a) {
	a++;
}

int main()
{
	int a = 1;
	test(a);
	std::cout << a << std::endl;
}

        众所周知,如上图这样子的直接传参形式并不会改变全局变量a的值,因为此种传参方式,实际上会再生成一个局部变量来存储a的数值,实际上无法改变全局变量a对应的地址上的数值,运行结果仍然是1。而此时就需要用指针的方法直接访问a的内存地址,并修改a的数值。如下:

# include <iostream>

void test(int* b) {
	(*b)++;
}

int main()
{
	int a = 1;
	test(&a);
	std::cout << a << std::endl;
}

        通过传入指针参数,即把a的地址赋给成指针形参b,通过访问变量a的内存地址直接修改数据即可修改a的值,运行发现此时运行结果是2。

         实际上在实际应用中,我们会发现这样的内存地址和数据的转换略显繁琐,此时引用(Cite)就出现了,引用实际上就是集成了指针的操作,方便在函数内部对全局变量的处理。如下:

# include <iostream>

void test(int& b) {
	b++;
}

int main()
{
	int a = 1;
	test(a);
	std::cout << a << std::endl;
}

        此时运行结果依然是2,这就是引用的效果,不仅简化了函数内部对传入参数的处理,在调用函数时也简化了传参操作,简洁明了。此时引用的操作可以认为是 *(&b) 取地址加取值,这样大大提高了代码的简洁性,同时也达到了我们的目的。在实际代码编写过程中,灵活运用指针和引用是必要的。本文关于指针和引用的介绍就到此结束,之后会不定期更新相关内容,谢谢支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值