首页 > 编程语言 >c++引用和指针

c++引用和指针

时间:2024-02-26 22:24:06浏览次数:18  
标签:10 变量 int c++ 地址 引用 指针

指针和引用

当我们需要在程序中传递变量的地址时,可以使用指针或引用。它们都可以用来间接访问变量,但它们之间有一些重要的区别。

指针是一个变量,它存储另一个变量的地址。通过指针,我们可以访问存储在该地址中的变量。指针可以被重新分配,可以指向不同的变量,也可以为NULL。指针使用*运算符来访问存储在地址中的值。

引用是一个别名,它为一个已经存在的变量提供了另一个名称。引用不能被重新分配,一旦引用被初始化,它将一直引用同一个变量。引用使用&运算符来声明和访问。

下面是一个简单的例子,演示了指针和引用的区别:

#include "stdafx.h"
#include <iostream>
using namespace std;
//引用和指针的例子
int run_ref_point() {
    int x = 10;
    int* ptr = &x; // 指针
    int& ref = x; // 引用

    cout << "x = " << x << endl;//10
    cout << "*ptr = " << *ptr << endl;//10
    cout << "ref = " << ref << endl;//10

    *ptr = 20;
    cout << "x = " << x << endl;//20
    cout << "*ptr = " << *ptr << endl;//20
    cout << "ref = " << ref << endl;//20

    ref = 30;
    cout << "x = " << x << endl;//30
    cout << "*ptr = " << *ptr << endl;//30
    cout << "ref = " << ref << endl;//30

    return 0;
}

在这个例子中,我们声明了一个整数变量x,并使用指针和引用来访问它。我们可以看到,指针和引用都可以用来访问变量的值,但是指针可以被重新分配,而引用不能

修改变量的值

当我们需要在函数中修改变量的值时,可以使用指针或引用。下面是一个例子,演示了如何使用指针和引用来交换两个变量的值:

#include <iostream>
using namespace std;

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}

int main() {
    int x = 10, y = 20;
    // 使用指针交换变量的值
    swap(&x, &y);
    cout << "x = " << x << ", y = " << y << endl;//x = 20, y = 10

    // 使用引用交换变量的值
    swap(x, y);
    cout << "x = " << x << ", y = " << y << endl;//x = 10, y = 20
    return 0;
}

使用指针来交换变量的值需要传递变量的地址,而使用引用来交换变量的值则不需要。另外,使用引用来交换变量的值更加简洁和直观,因为它不需要使用*运算符来访问变量的值。

前面加&变成指针类型

为什么在一个int类型的变量前加&就变成了指针?举个例子

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
int run_ref_point2() {
    int x = 10, y = 20;

    // 使用指针交换变量的值
    swap(&x, &y);
}

在C++中,&符号有两种含义:

  1. 取地址符:&符号可以用来获取一个变量的地址,例如int a = 10; int *p = &a;,这里的&符号就是取地址符,用来获取变量a的地址。

  2. 引用符:&符号还可以用来定义引用类型,例如int a = 10; int &b = a;,这里的&符号就是引用符,用来定义一个名为b的引用,它引用了变量a。

当我们在一个int类型的变量前加&时,它的含义是取地址符,表示获取该变量的地址。例如:

int a = 10;
int *p = &a;  // 获取变量a的地址,并将其赋值给指针p

这里的&符号就是取地址符,用来获取变量a的地址。

如果我们想要定义一个引用,应该这样写:

int a = 10;
int &b = a;  // 定义一个引用b,它引用了变量a

这里的&符号就是引用符,用来定义一个名为b的引用,它引用了变量a。

标签:10,变量,int,c++,地址,引用,指针
From: https://www.cnblogs.com/zhaoqingqing/p/18035724

相关文章

  • $b$2在excel引用,$a$1在excel引用的意思
    在Excel中,$B$2是一个单元格引用,$表示绝对引用。在自动填充时,带有$的单元格将保持不变。当我们在Excel中输入公式或函数时,可以使用单元格引用来实现对数据的计算和引用。在这个例子中,$B$2表示的是B列的第二行,也就是B2单元格。 $A$1表示第一行第一列的单元格,即A1单元格;$D$......
  • C++内存管理
    关于C++内存和分配的学习笔记C++内存和分配很容易出问题,为了编写高质量的CPP代码,我们必须了解幕后的工作原理。1.内存泄漏例如:voidleaky(){newint;//这里就是内存泄漏cout<<"我泄漏了一个int的内存!"<<endl;}自由存储区中的数据库无法被栈或者间接访问,这块内存被......
  • C++ 关键字
    C++关键字alignas和alignof用法alignasalignas指定了内存按照多少对齐。alignas(0)这种写法无效,编译器会无视你的这个代码structalignas(8)S{};//表示是8个字节的对齐方式structalignas(1)U{Ss;};//虽然里面有个S,但是依然指定了该结构体的内存对齐要求为1字......
  • C++库大全
    基础类1、DinkumwareC++Library参考站点:http://www.dinkumware.comP.J.Plauger编写的高品质的标准库。P.J.Plauger博士是Dr.Dobb's程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其C/C++的产品中采用Dinkumware的库。2......
  • 指针
    目录一、什么是指针二、指针的定义三、向函数传递指针参数1.传入字符串类型的指针2.传入数组类型的指针3.传入切片一、什么是指针指针也是一种变量,但是它的功能只是用来存储变量内存地址(MemoryAddress),即指针变量的值为其他变量的内存地址指针是变量,所以它本身也有内存......
  • C++ 刷题必备
    目录语言必备语言必备在C++中刷Leetcode时,有一些常用的语言技巧和最佳实践可以帮助你更有效地解决问题。以下是一些建议:熟悉STL(StandardTemplateLibrary):使用vector,list,set,map等容器来存储和操作数据。使用algorithm库中的函数,如sort,binary_search,unique等。......
  • 掌握C语言指针,轻松解锁代码高效性与灵活性(下)
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • C++ GDAL用CreateCopy()新建栅格并修改波段的个数
      本文介绍基于C++语言GDAL库,为CreateCopy()函数创建的栅格图像添加更多波段的方法。  在C++语言的GDAL库中,我们可以基于CreateCopy()函数与Create()函数创建新的栅格图像文件。其中,CreateCopy()函数需要基于一个已有的栅格图像文件作为模板,将模板文件的各项属性信息(例如空间......
  • C++ auto与循环
    C++auto与循环C++auto的介绍typeid(p).name();可以输出auto的类型auto是C++11引入的一个关键字,用于自动类型推导。编译器会根据初始化表达式的类型来自动推导auto变量的类型。使用auto可以简化代码,减少重复书写类型名称的繁琐,并且当类型非常复杂或者难以书写时,auto......
  • C# 引用DLL调用时注释无法显示
    C#引用DLL调用时注释无法显示修改前,调用DLL中的方法没有注释:修改后,调用DLL中的方法有注释:解决办法:在生成DLL时,将项目属性的生成页面中,勾选“XML文档文件”使用时,需要将XML文件和DLL文件放在同一目录下转载:https://www.cnblogs.com/KingKwon/p/7419508.html......