C++編程(二)引用

文章目錄

  • 一、C++中的引用
    • (一)引用
      • 1. 語法格式
      • 2. 作用
      • 3. 注意事項
    • (二)常引用
      • 2. 其他場景
    • (三)引用和函數結合使用
      • 1. 引用可以作為函數的參數
      • 2. 引用可以作為函數的返回值
    • (四)引用和指針的區別
  • 二、C++中的動態內存分配
    • (一)
    • (二)malloc/free和new/delete
    • (三)使用示例

一、C++中的引用

引用是對引用目標起別名,類似于Linux中的硬鏈接;

(一)引用

1. 語法格式

數據類型 &引用名 = 引用目標;
eg: int &a1 = a;

  • 注:
  • &是一個引用的標識;
  • &在引用中使用表示的是引用的一個標識;
    在兩個操作數之間使用表示按位與(a & b);
    在其他場合下表示取地址(&a)

2. 作用

節省內存開銷:在給函數傳遞參數時,形參需要額外的開辟空間,但是使用引用后就可以節省形參的空間

不使用引用

 int func(int a,int b){cout << "a="<<a<<" b="<<b<<endl;cout << "&a="<<&a<<" &b="<<b<<endl;return a+b;}int main(){int a = 5,b=10;cout << "a="<<a<<" b="<<b<<endl;cout << "&a="<<&a<<" &b="<<b<<endl;cout << "--------------------"<<endl;func(a,b);}

從下面運行結果可知,形參會分配新的內存空間
在這里插入圖片描述
使用引用

 int func(int &a,int &b){cout << "a="<<a<<" b="<<b<<endl;cout << "&a="<<&a<<" &b="<<b<<endl;return a+b;}int main(){int a = 5,b=10;cout << "a="<<a<<" b="<<b<<endl;cout << "&a="<<&a<<" &b="<<b<<endl;cout << "--------------------"<<endl;func(a,b);}

從下面結果可知,使用引用后,并未給形參分配新的內存空間
在這里插入圖片描述

3. 注意事項

  1. 引用在定義時必須要有引用的目標
  2. 引用的數據類型 和 引用的目標的數據類型 必須保持一致
  3. 引用目標一旦綁定不可修改
int a = 5;
int &a1 = a;
int b = 10;
a1 = b;//這種寫法是簡單的賦值操作,而非修改綁定目標

(二)常引用

用const修飾的引用是一個常引用,以下兩種使用均可以
const 數據類型 &引用名 = 引用目標;
數據類型 const &引用名 = 引用目標;

常引用不能通過引用來修改引用目標的值,可以通過引用目標自身進行修改。

int a=111;
int &a1=a;
a1=222;//此時就會報錯

在這里插入圖片描述

  • 注:以下寫法是錯誤的:
    數據類型 &const 引用名 = 引用目標;
    因為引用一旦綁定,后續無法修改。

2. 其他場景

  1. 普通引用不能修飾常量,只有常引用可以修飾常量;
int &a=100; //報錯
const int &b=100;

在這里插入圖片描述

  1. 普通引用不能修飾臨時值,常引用可以修飾臨時值
int x=10;
int &a = 5+x;
const int &b=5+x;

在這里插入圖片描述

(三)引用和函數結合使用

1. 引用可以作為函數的參數

兩個數交換位置,傳值、傳地址、傳引用的區別

#include <iostream>
using namespace std;
int swap1(int a,int b){int temp=a;a=b;b=temp;
}
int swap2(int *a,int *b){int temp=*a;*a=*b;*b=temp;
}
int swap3(int &a,int &b){int temp=a;a=b;b=temp;
}
int main(){int a=100,b=200;swap1(a,b);//傳值cout<<"a="<<a<<" b="<<b<<endl;swap2(&a,&b);//傳地址cout<<"a="<<a<<" b="<<b<<endl;swap3(a,b);//傳引用cout<<"a="<<a<<" b="<<b<<endl;
}

在實際開發中,采用哪種方法根據實際需求決定

2. 引用可以作為函數的返回值

格式:

數據類型& 函數名(形參表){函數體;
}
  • 注:
  • 引用不可返回局部變量;可以返回全局變量或者使用static修飾的變量
  • 常見的函數返回值是一個右值,引用作為返回值是一個左值。

(四)引用和指針的區別

二、C++中的動態內存分配

(一)

C++仍然支持malloc/free操作,但是一般在C++中使用new/delete

(二)malloc/free和new/delete

(三)使用示例

要求:從堆區申請一塊連續空間,在終端上輸入學生成績,并求出成績的最高分和最低分,以及成績之和

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/35298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35298.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35298.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在 C/C++ 中使用 popen去執行linux命令樣例,失敗場景

在 C/C 中使用 popen 函數去執行 Linux 命令是一種常見的方式&#xff0c;但確實存在多種可能導致失敗的場景。以下是一些可能導致 popen 失敗的常見原因和樣例&#xff1a; 命令不存在或路徑錯誤&#xff1a; 如果你嘗試執行的命令不存在于系統的 PATH 環境變量中&#xff0c;…

記因hive配置文件參數運用不當導致 sqoop MySQL導入數據到hive 失敗的案例

sqoop MySQL導入數據到hive報錯 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 64 報錯解釋&#xff1a; 這個錯誤表明Sqoop在嘗試導入數據到Hive時遇到了問題&#xff0c;導致Hive進程異常退出。狀態碼…

HarmonyOS Next開發學習手冊——通過startAbility拉起文件處理類應用

使用場景 開發者可以通過調用startAbility接口&#xff0c;由系統從已安裝的應用中尋找符合要求的應用來實現打開特定文件的意圖&#xff0c;例如&#xff1a;瀏覽器下應用下載PDF文件&#xff0c;可以調用此接口選擇文件處理應用打開此PDF文件。開發者需要在請求中設置待打開…

三個方法計算兩張圖片的相似度

import cv2 import numpy as np from skimage.metrics import structural_similarity as ssim import osdef is_similar(image1, image2, threshold0.95):對圖像的顏色信息敏感&#xff0c;能快速計算。對圖像的旋轉、縮放等幾何變換不敏感。缺點:對圖像的結構、紋理等信息不敏…

0625_ARM2

練習&#xff1a; 匯編實現1-100累加&#xff0c;結果保存在r0 .text .global _start start:mov r0,#0mov r1,#1b loop loop:add r0,r0,r1add r1,r1,#1cmp r1,#101bne loop .end思維導圖&#xff1a;

C#——SortedList 排序列表詳情

SortedList 排序列表 SortedList 類用來表示鍵/值對的集合&#xff0c;這些鍵/值對按照鍵值進行排序&#xff0c;并且可以通過鍵或索引訪問集合中的各個項。 我們可以將排序列表看作是數組和哈希表的組合&#xff0c;其中包含了可以使用鍵或索引訪問各項的列表。如果您使用索…

tensorflow學習1.3-創建會話,啟動會話

tensorflow學習1.3-創建會話&#xff0c;啟動會話 會話的由來與作用由來作用 會話的定義與結構定義 用法基本用法上下文管理器執行部分計算圖獲取多個結果 總結 練習代碼報錯原因&#xff1a;TensorFlow 2.x中的Eager Execution使用兼容模式來啟用SessionEager Execution和計算…

AI文檔助手:提升文檔處理效率

隨著人工智能技術的飛速發展&#xff0c;AI文檔助手已經成為我們提升工作效率的重要工具。小編就來和大家分享幾款AI文檔助手&#xff0c;它們能夠通過智能化的功能幫助我們快速、準確地完成各種文檔任務。 1.百度文庫AI助手 百度文庫AI助手是百度基于文心一言重構的一站式智能…

全景圖片/老照片/動漫圖片一鍵無損放大與修復

在日常生活中&#xff0c;我們經常使用系統自帶的圖片處理軟件來對圖片進行縮放操作&#xff0c;從而實現放大或縮小圖片。然而&#xff0c;這種方法會帶來一個問題&#xff1a;如果原始圖片較小&#xff0c;放大后會導致精度損失&#xff0c;使圖片變得模糊。 近年來&#xf…

vue uniapp MEQX JWT認證

1.下載依賴 npm install mqttimport * as mqtt from "mqtt/dist/mqtt.min" ? 我是用的uniapp vue3 vite這里嘗試了很多方式,都導入不進去后來我就采用的本地引入方式, 把mqtt.min.js下載到本地然后在index.html 中導入<script src"./MEQX/mqtt.js" typ…

rapidocr-onnxruntime庫及在open-webui上傳PDF 圖像處理 (使用 OCR)應用

背景 rapidocr-onnxruntime是一個跨平臺的OCR庫&#xff0c;基于ONNXRuntime推理框架。 目前已知運行速度最快、支持最廣&#xff0c;完全開源免費并支持離線快速部署的多平臺多語言OCR。 緣起&#xff1a;百度paddle工程化不是太好&#xff0c;為了方便大家在各種端上進行oc…

終極指南:解決iCloud備份錯誤代碼的全面策略

終極指南&#xff1a;解決iCloud備份錯誤代碼的全面策略 在數字化時代&#xff0c;數據安全至關重要。iCloud作為Apple提供的云服務&#xff0c;為我們的iPhone、iPad等設備提供了便捷的數據備份與恢復功能。然而&#xff0c;在使用過程中&#xff0c;我們可能會遇到各種備份錯…

ros,open3d單線激光雷達數據可視化

之前一直嘗試將可視化寫在ros的回調函數中&#xff0c;visualization一直會阻塞進程&#xff0c;換一種方式可以順利實現可視化 import rospy import open3d as o3d import numpy as np from sensor_msgs.msg import LaserScanglobal scan_data scan_data Nonedef callback_l…

機器學習之對比學習方法SimSiam(Simple Siamese)

SimSiam(Simple Siamese)是一種自監督對比學習方法,由Facebook AI Research于2021年提出。SimSiam的設計旨在避免負樣本對,并且不使用動量編碼器,進一步簡化了對比學習的實現過程。 SimSiam的基本概念 自監督學習: 自監督學習方法通過從數據本身獲取監督信號進行學習,不…

qt 播放音頻 c++

目錄 不能播放&#xff1a; 可以播放&#xff1a; 原因&#xff1a; QT core gui sql network multimedia 不能播放&#xff1a; #include <QMediaPlayer>QMediaPlayer player;// player.setMedia(QUrl("qrc:/res/raw/qs.mp3"));player.setMedia(QU…

近鄰算法基礎概念

近鄰算法&#xff0c;尤其是K-最近鄰&#xff08;K-Nearest Neighbors, KNN&#xff09;算法&#xff0c;是一種基于實例的學習方法&#xff0c;廣泛應用于分類和回歸分析中。 基本概念 目的&#xff1a;KNN算法的目的是對新的未知樣本進行分類&#xff08;或預測其數值&…

一款強大的上位機模擬通訊工具----HslCommunicationDemo

目錄 引言 工具概述 官網下載鏈接 安裝步驟 使用教程 引言 在工業自動化和機器人控制領域&#xff0c;上位機模擬通訊工具是工程師和開發者日常工作中不可或缺的一部分。這些工具不僅能幫助我們驗證設備間的通信狀態&#xff0c;還能在設備調試和集成過程中提供極大的便利。…

38.控制功能實現

上一個內容&#xff1a;37.添加簡易的調試功能 以 37.添加簡易的調試功能 它的代碼為基礎進行修改 效果圖&#xff1a; 下圖紅框位置的功能實現 Dlls項目中添加一個Dialog Dialog如下 然后給它添加一個類&#xff0c;MFC添加的類可能會報錯添加 #include "afxdialogex.h…

聚酰胺-酰亞胺(PAI)應用前景廣闊 酰氯法和異氰酸酯法為其主流制備方法

聚酰胺-酰亞胺&#xff08;PAI&#xff09;應用前景廣闊 酰氯法和異氰酸酯法為其主流制備方法 聚酰胺-酰亞胺又稱PAI&#xff0c;是一種分子鏈呈酰亞胺環和酰胺鍵有規則交替排列的高性能熱塑性樹脂。PAI具有耐磨耗性能好、摩擦系數低、尺寸穩定性好、耐高溫、耐輻射、化學穩定性…

通俗易懂的Chat GPT以及國內GPT推薦

ChatGPT是一種先進的聊天機器人&#xff0c;它的全稱是“生成式預訓練變換器”&#xff08;Generative Pre-trained Transformer&#xff09;。ChatGPT背后的基本原理可以簡化為以下幾個關鍵點&#xff1a; 大規模語言模型&#xff1a; ChatGPT建立在一個大規模的語言模型之上&…