关于指针与引用的差别——C++
准备
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); 函数体略
关于指针与引用的差别——C++的更多相关文章
- C++ 指针与引用 知识点 小结
[摘要] 指针能够指向变量.数组.字符串.函数.甚至结构体.即指针能够指向不同数据对象.指针问题 包含 常量指针.数组指针.函数指针.this指针.指针传值.指向指针的指针 等. 主要知识点包含:1. ...
- C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》
C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效 ...
- C++ 指针—02 指针与引用的对照
★同样点: ●都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:而引用则是某块内存的别名. ★不同点: ●指针是一个实体,而引用仅是个别名: ●引用仅仅能在定义时被初始化一次,之后不可变: ...
- C++指针和引用简介
摘要 本文介绍C++指针和概念引用 这是一个指针 指针的类型 指针所指向的类型 指针表达式 指针与函数 什么是引用 指针引用差别 指针和引用的同样点和不同点 **什么是指针** 指针就是一个存放地址的 ...
- C++之指针,引用与数组
引用只是对象的另一个名字,通过在变量名前面添加"&”符号来定义,而指针保存的是另一个对象的地址,它们两都提供了间接访问所服务变量的途径. 但是它们的差别还是挺大的: 先从它们的值说起 ...
- [速记]关于指针,引用和递归和解递归——C++
在写基于二叉排序树的查找时,分为三个过程 1.二叉排序树的插入 2.二叉排序树的建立 3.基于二叉排序树的查找 其中第三部可以递归方式实现,也可以用while循环解递归,于是我想也解解第一步的递归,看 ...
- C++指针参数引用
粘个代码占位置,以后有时间把指针函数,函数指针都补上 #include <iostream> using namespace std; void freePtr1(int* p1){ /* ...
- C/C++:提升_指针的指针和指针的引用
C/C++:提升_指针的指针和指针的引用 写在前面 今天在使用指针的时候我发现了一个自己的错误.
- C++学习笔记 指针与引用
指针与引用 1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其 ...
随机推荐
- HTML+css基础 css选择器 选择器的权重
css选择器 选择器的权重 在css中,哪个选择器的权重高,就走谁的样式 标签选择器的权重是1 class选择器的权重是10 Id选择器的权重是100 行间样式的权重是1000 带有关键字 !imp ...
- SQL Server 判断各种对象是否存在和sysobjects的关系
一.判断表是否存在 object_id():获取表的ID,其中N表示Unicode类型.可以支持不同语种的对象名 ) drop table [dbo].[表名] 二.判断要创建的存储过程名是否存在 ) ...
- 【转】Visual Studio 2008 可扩展性开发(二):Macro和Add-In初探
前言 在VS概览中,我们简单回顾了一下VS的历史.本文将通过两个简单的例子来说明Macro和Add-In的开发.通过Macro我们把VS中的一些重复操作录制下来,之后可以多次运行,节省时间并保持好的心 ...
- 一个简单的 WPF 程序,用于显示实时时间
直接贴代码了: TimeShowerWindow.xaml <Window x:Class="HelloWorld.TimeShowerWindow" xmlns=" ...
- yum 找不到程序,yum更换国内阿里源
使用百度云服务器,发现百度yum源非常不稳定,果断采用阿里源,操作步骤如下: 一.备份 $ cd /etc/yum.repos.d/ $ mv baidu-bcm.repo baidu-bcm.rep ...
- My time is limited
Your time is limited, so don't waste it living someone else's life. Don't be trapped by dogma - whic ...
- 永久清理git中的历史大文件
原文发布于:https://www.chenxublog.com/2019/05/26/remove-git-big-files.html 有写老的git仓库,因为当年的无知,不会用.gitignor ...
- webapi 导入excel处理数据
参考资料 https://blog.csdn.net/pan_junbiao/article/details/82935992 https://www.cnblogs.com/dansedia ...
- Oracle查询日期字段是否包含时分秒 TRUNC() 函数
可以使用 ORACLE TRUNC()函数 来进行判断 表 A 日期字段 datetime 部分数据带时分秒,部分数据没有时分秒 select * from A where datetime = TR ...
- 让windows 10 家庭版 支持 Hyper-v 的方法
pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f ...