关于指针与引用的差别——C++
2024-09-01 04:19:57
准备
https://zhuanlan.zhihu.com/p/27974028
开始
int 是int类型变量声明
int * 是int指针声明,指针其实就是地址变量,用来储存地址值的"容器"
首先有一个概念
int a;
int &x = a;
a = 123;
以下用%d代替变量a的值
那么,
a int型变量
%d a目前储存的数据,整数123
&k int型变量,a的别名
假如现在有一个指针p和一个引用k
&k = p;
p 地址变量,即指针
*p p目前储存的数据,即地址0x12345678
int *&k 地址变量,即指针,p的别名
总结,打印*p,即打印目前取得的值(是值,数据)
p或者*&k是指针(地址变量,是用来储存地址的容器)
容器可以储存不同的数据,用来存放不同的值
而数据是数值,如同123,就是一个值而已
用法区别:
引用的用法之一:传递指针给子函数,并在子函数中改变这个指针的值(指向的地址)
地址的用法:传递地址*p给子函数,子函数中变量再怎么变化也不会影响main中的指针p
其实在c里也是可以用巧妙的方法传递指针的,只要用新指针k指向目标指针b,然后传递k的地址 [k是指针的指针,他的值是 指针b所在地址]
#include <stdio.h> void testpointer(int **);
int main(void){
int a = ;
int * p = &a; // p: 0x65fecc
testpointer(&p);
printf("In Main,p is [%d]\n", *p);
} void testpointer(int **k){
printf("[%x]\n", *k); // **k(<指针的指针>,名为k): 0x65fec8
// 打印出*k即p值为 0x65fecc printf("{%d}\n", *(*k)); // *k就是p,都指向着int变量a, 所以间接运算符结果为a的值7
int b = ;
*k = &b; // 修改*k 就是修改p。
/* 因为**k是指针的指针,名为k,指向p的地址。
*k是<指针的指针 k>的值,指针的指针的值自然是指针了,所以*k就是p */
}
运行结果:
[65fecc]
{}
In Main,p is []
另外也可以不用二级指针,而使用函数返回值
如 SeqList * L;
L = InitList();
声明 SeqList * InitList(void); 函数体略
最新文章
- cocos2d-x宏定义
- [转]关于SVN的操作批处理示例
- [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图
- C#-WebForm-WebForm开发基础、如何给控件注册事件?——事件委托写法、http无状态性、三层结构
- rdesktop的使用
- C# 中正确实现 IDisposable 接口
- 7-13IN和NOT IN 子查询
- EF错误记录
- HDU 4283 You Are the One (12年天津 区间DP)
- spring拦截器
- Tomcat源码学习记录--web服务器初步认识
- 用异提交时,后台通过校验规则文件,校验不通过时,跳转到INPUT视图时,前台显示错误信息的解决办法
- iOS 执行ScrollView在空白空间-解
- Enhancing Reliability and Response Times via Replication in Computing Clusters---INFOCOM 2015
- linux下如何使用vnstat查看服务器带宽流量统计
- linux cat more less head tail
- Oracle安装oraInventory问题
- Qt 地址薄 (二) 添加地址
- 【翻译】Ext JS 5:为不同设备设置不同的主题
- java基础知识—类和对象