C++中指针与引用详解

本文详细探讨了C++中的指针和引用,包括它们的声明、内存分配(new与malloc的区别)、以及在实际编程中的应用。指针作为内存地址的变量,允许间接访问数据,而引用作为已定义变量的别名,提供了更安全的访问方式。两者在作为函数参数时,引用能直接修改原始数据,而指针需要解引用操作。此外,引用本质上是一个指针常量,其指向不可变,但指向的值可变。
摘要由CSDN通过智能技术生成

在计算机存储数据时必须要知道三个基本要素:信息存储在何处?存储的值为多少?存储的值是什么类型?因此指针是表示信息在内存中存储地址的一类特殊变量,指针和其所指向的变量就像是一个硬币的两面。指针一直都是学习C语言的难点,在C++中又多了一个引用的概念。初学时很容易把这两个概念弄混,下面就来通过一些例子来说明二者之间的差别。

1、指针的声明

上文中提到,指针和其所指向的变量就像硬币的两面,因此通过取址符号*”&”我们可以找到变量的地址,通过解引用符号“*”*可以找到地址内存放的变量值。

int data = 10;    //声明了一个变量data,并赋初始值10,存储的值是int类型
int* p_data = &data;    //找到 data 在内存中存放的位置,即p_data
cout << "地址为:" << int(p_data) << "\t 存放的值为:" << data << endl;

输出结果为:

地址为:8191436  存放的值为:10

地址默认是16进制,我们在输出时将其转换成了int 类型,因此以十进制输出。输出结果翻译过来就是:在地址编码为8191436的位置存放了值为10的变量data,再进一步地说,data与*p_data 表示同一个东西。为了更有助于理解,我们绘制了下图:

因此从本质上看,指针与普通的变量并没有什么太大的区别,只是指针变量可以通过解引用的方式找到指针所对应的地址中存放的数值。假如定义如下:

int data = 10;
int* p_data = &data;        //定义指向 int 类型的指针 p_data, 存储的是 int 类型的变量 data的地址,其
int** p_p_data = &p_data;    //定义指向 int* 类型的指针 p_p_data, 存储的是 int* 类型的变量 p_data的地址

cout << "p_data:" << p_data << "\t 存放的值为:" << *p_data << endl;
cout << "p_p_data:" << p_p_data << "\t 存放的值为:" << *p_p_data << endl;

输出结果为:

p_data:00EFF96C         存放的值为:10
p_p_data:00EFF960       存放的值为:00EFF96C

从输出结果可以看出ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值