news 2026/4/17 8:14:45

16. 指针和引用的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
16. 指针和引用的区别

1.指针和引用的区别


1.指针和引用的区别

a.指针 是一个"独立的变量, 专门用来存储另一个变量的内存地址; 指针本身占用内存空间, 可指向不同的变量(甚至空地址)"b.引用 是"某个变量的别名(nickname)和原变量共享同一块内存空间, 没有自己独立的内存",本质上是编译器层面的"语法糖"

a.初始化差异#include <iostream>usingnamespacestd;intmain(){inta=10;// 指针:可未初始化(不推荐,野指针)int*p1;// 合法,但p1指向随机地址(野指针,危险)int*p2=&a;// 正确初始化// 引用:必须初始化,否则编译报错// int& ref1; // 错误:引用必须初始化int&ref2=a;// 正确:ref2是a的别名return0;}

b.指向/绑定修改差异#include <iostream>usingnamespacestd;intmain(){inta=10,b=20;// 指针:可修改指向int*p=&a;cout<<*p<<endl;// 输出:10p=&b;// 指针指向bcout<<*p<<endl;// 输出:20// 引用:不能修改绑定对象(看似修改,实际是修改原变量)int&ref=a;cout<<ref<<endl;// 输出:10ref=b;// 不是绑定b,而是把b的值赋给a(a变成20)cout<<a<<endl;// 输出:20cout<<ref<<endl;// 输出:20(ref还是a的别名)return0;}

c.空值与语法使用差异#include <iostream>usingnamespacestd;intmain(){// 指针:可空int*p=nullptr;// 空指针,合法if(p==nullptr){cout<<"p是空指针"<<endl;}// 引用:不能空(以下代码编译报错)// int& ref = nullptr; // 错误:引用必须绑定到有效变量// 语法使用:指针需要解引用,引用直接用intnum=100;int*p_num=&num;int&ref_num=num;cout<<*p_num<<endl;// 指针:解引用访问值,输出100cout<<ref_num<<endl;// 引用:直接访问值,输出100cout<<&p_num<<endl;// 指针自身的地址(独立内存)cout<<&ref_num<<endl;// 引用的地址 = 原变量num的地址(无独立内存)return0;}

d.const修饰的差异#include <iostream>usingnamespacestd;intmain(){intx=5,y=6;// const修饰指针:两种场景constint*p1=&x;// 指向的内容不可改,指针本身可改// *p1 = 10; // 错误p1=&y;// 正确int*constp2=&x;// 指针本身不可改,指向的内容可改*p2=10;// 正确// p2 = &y; // 错误// const修饰引用:限制引用的内容不可改constint&ref=x;// ref = 10; // 错误:不能修改const引用的内容x=10;// 正确:原变量可改,引用值也会变cout<<ref<<endl;// 输出:10return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 8:59:29

第1章 Java语言概述----开发体验— HelloWorld

1.6 开发体验 — HelloWorld 步骤&#xff1a; 1. 将 Java 代码编写到扩展名为 .java 的文件中。 2. 通过 javac 命令对该 java 文件进行编译。 3. 通过 java 命令对生成的 class 文件进行运行。步骤一&#xff1a;编写  选择最简单的编辑器&#xff1a;记 事本。  敲入…

作者头像 李华
网站建设 2026/4/18 1:22:19

JYLN061 LORA无线数传终端:轻松代替有线485,适配恶劣工业环境

JYLN061 LORA无线数传终端是一款非常典型且应用广泛的物联网核心设备。简单来说&#xff0c;这是一种利用LoRa调制技术&#xff0c;能在复杂工业环境下实现远达5公里(理论或典型距离)无线数据传输的终端设备。一、组成部分 1. 核心设备&#xff1a;LoRa无线数传终端/模块 这是安…

作者头像 李华
网站建设 2026/4/11 12:47:40

SIEMENS同步电机1FT7105- 5WF71-4NH1

SIEMENS同步电机1FT7105-5WF71-4NH1与普通电机在结构设计、控制方式、性能表现和应用场景上存在本质区别。该电机作为高性能永磁同步伺服电机&#xff0c;专为精密工业自动化系统打造&#xff0c;而普通电机&#xff08;如异步电机&#xff09;则更适用于对动态响应和控制精度要…

作者头像 李华
网站建设 2026/4/17 14:37:53

内核子系统、SoC控制器驱动、驱动与内核的关系

这是一个关于Linux内核架构的核心问题&#xff0c;涉及内核子系统、SoC控制器驱动、驱动与内核的关系。让我用清晰的层次结构为您解释&#xff1a; 一、整体架构关系图 ┌─────────────────────────────────────────────────…

作者头像 李华
网站建设 2026/4/3 5:24:39

【C/C++】线程池详解

线程池详解 (Thread Pool Deep Dive) 什么是线程池&#xff1f;(What is a Thread Pool?) 线程池是一种多线程处理模式&#xff0c;它预先创建一定数量的线程&#xff0c;将任务放入队列中&#xff0c;由空闲的线程从队列中取出任务并执行。 为什么需要线程池&#xff1f; …

作者头像 李华