C++引用編程練習

#include <iostream>
using namespace std;
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
double& setValues(int i) {
double& ref = vals[i];
return ref; // 返回第 i 個元素的引用,ref 是一個引用變量,ref 引用 vals[i]
}
// 要調用上面定義函數的主函數
int main ()
{
cout << "改變前的值" << endl;
for ( int i = 0; i < 5; i++ )
{
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
setValues(1) = 20.23; // 改變第 2 個元素
setValues(3) = 70.8; // 改變第 4 個元素
cout << "改變后的值" << endl;
for ( int i = 0; i < 5; i++ )
{
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
return 0;

這段代碼是用 C++ 編寫的,主要功能是通過引用(reference)來修改數組中的元素。下面我會逐行解釋這段代碼的作用,幫助你理解它。


🔹整體思路

該程序定義了一個全局數組 vals,并定義了一個函數 setValues(int i),該函數返回數組中第 i 個元素的引用。通過這個引用,我們可以在 main() 函數中直接修改數組中的值。


🔹代碼詳解

📌1. 引入頭文件和命名空間

 

cpp

深色版本

#include <iostream>
using namespace std;
  • #include <iostream>:引入輸入輸出流庫,用于使用?cincout?等。
  • using namespace std;:使用標準命名空間,這樣我們可以直接寫?cout?而不是?std::cout

📌2. 定義全局數組

 

cpp

深色版本

double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
  • 這是一個?double?類型的全局數組,包含 5 個元素。
  • 元素分別是:10.1、12.6、33.1、24.1、50.0。

📌3. 定義函數?setValues

 

cpp

深色版本

double& setValues(int i) {double& ref = vals[i];return ref;
}
  • 這個函數接收一個整數?i,表示數組索引。
  • double& ref = vals[i];:創建一個對?vals[i]?的引用變量?ref
  • return ref;:將這個引用返回出去。

?? 重點理解:

  • 返回的是引用(double&),這意味著調用者可以直接通過這個返回值修改原數組的值。
  • 如果返回的是?double(非引用),就只是返回一個拷貝,不能用來修改原數據。

📌4. 主函數?main()

 

cpp

深色版本

int main ()
{cout << "改變前的值" << endl;for ( int i = 0; i < 5; i++ ){cout << "vals[" << i << "] = ";cout << vals[i] << endl;}
  • 打印數組在修改前的內容。
 

cpp

深色版本

    setValues(1) = 20.23; // 改變第 2 個元素setValues(3) = 70.8;  // 改變第 4 個元素
  • 因為?setValues(i)?返回的是?vals[i]?的引用,所以可以像?vals[i]?那樣賦值。
  • setValues(1) = 20.23;?實際上是在修改?vals[1]
  • setValues(3) = 70.8;?實際上是在修改?vals[3]
 

cpp

深色版本

    cout << "改變后的值" << endl;for ( int i = 0; i < 5; i++ ){cout << "vals[" << i << "] = ";cout << vals[i] << endl;}
  • 打印修改后的數組內容。
 

cpp

深色版本

    return 0;
}

?運行結果示例

 

深色版本

改變前的值
vals[0] = 10.1
vals[1] = 12.6
vals[2] = 33.1
vals[3] = 24.1
vals[4] = 50
改變后的值
vals[0] = 10.1
vals[1] = 20.23
vals[2] = 33.1
vals[3] = 70.8
vals[4] = 50

🧠總結

功能解釋
double vals[]定義一個?double?數組
double& setValues(int i)返回數組元素的引用
setValues(1) = 20.23利用引用特性修改數組中的元素
cout輸出信息到控制臺

如果你還不太理解“引用”這個概念,可以把它想象成某個變量的別名。就像一個人有兩個名字一樣,兩個名字指向的是同一個人。

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

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

相關文章

機密虛擬機的威脅模型

本文將介紹近年興起的機密虛擬機&#xff08;Confidential Virtual Machine&#xff09;技術所旨在抵御的威脅模型&#xff0c;主要關注內存機密性&#xff08;confidentiality&#xff09;和內存完整性&#xff08;integrity&#xff09;兩個方面。在解釋該威脅可能造成的問題…

【Rust trait特質】如何在Rust中使用trait特質,全面解析與應用實戰

?? 歡迎大家來到景天科技苑?? &#x1f388;&#x1f388; 養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者簡介&#xff1a;景天科技苑 &#x1f3c6;《頭銜》&#xff1a;大廠架構師&#xff0c;華為云開發者社區專家博主&#xff0c;…

Simulink模型回調

Simulink 模型回調函數是一種特殊的 MATLAB 函數&#xff0c;可在模型生命周期的特定階段自動執行。它們允許用戶自定義模型行為、執行初始化任務、驗證參數或記錄數據。以下是各回調函數的詳細說明&#xff1a; 1. PreLoadFcn 觸發時機&#xff1a;Simulink 模型加載到內存之…

FPGA:Xilinx Kintex 7實現DDR3 SDRAM讀寫

在Xilinx Kintex 7系列FPGA上實現對DDR3 SDRAM的讀寫&#xff0c;主要依賴Xilinx提供的Memory Interface Generator (MIG) IP核&#xff0c;結合Vivado設計流程。以下是詳細步驟和關鍵點&#xff1a; 1. 準備工作 硬件需求&#xff1a; Kintex-7 FPGA&#xff08;如XC7K325T&…

Python爬蟲實戰:研究進制流數據,實現逆向解密

1. 引言 1.1 研究背景與意義 在現代網絡環境中,數據加密已成為保護信息安全的重要手段。許多網站和應用通過二進制流數據傳輸敏感信息,如視頻、金融交易數據等。這些數據通常經過復雜的加密算法處理,直接分析難度較大。逆向工程進制流數據不僅有助于合法的數據獲取與分析,…

Java Spring Boot項目目錄規范示例

以下是一個典型的 Java Spring Boot 項目目錄結構規范示例&#xff0c;結合了分層架構和模塊化設計的最佳實踐&#xff1a; text 復制 下載 src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── myapp/ │…

圖像顏色理論與數據挖掘應用的全景解析

文章目錄 一、圖像顏色系統的理論基礎1.1 圖像數字化的本質邏輯1.2 顏色空間的數學框架1.3 量化過程的技術原理 二、主要顏色空間的深度解析2.1 RGB顏色空間的加法原理2.2 HSV顏色空間的感知模型2.3 CMYK顏色空間的減色原理 三、圖像幾何屬性與高級特征3.1 分辨率與像素密度的關…

mysql兩張關聯表批量更新一張表存在數據,而另一張表不存在數據的sql

一、mysql兩張關聯表批量更新一張表存在、另一張表不存在的數據 創建user和user_order表 CREATE TABLE user (id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,id_card varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NU…

PNG轉ico圖標(支持圓角矩形/方形+透明背景)Python腳本 - 隨筆

摘要 在網站開發或應用程序設計中&#xff0c;常需將高品質PNG圖像轉換為ICO格式圖標。本文提供一份基于Pillow庫實現的&#xff0c;能夠完美保留透明背景且支持導出圓角矩形/方形圖標的格式轉換腳本。 源碼示例 圓角方形 from PIL import Image, ImageDraw, ImageOpsdef c…

在線SQL轉ER圖工具

在線SQL轉ER圖網站 在數據庫設計、軟件開發或學術研究中&#xff0c;ER圖&#xff08;實體-關系圖&#xff09; 是展示數據庫結構的重要工具。然而&#xff0c;手動繪制ER圖不僅耗時費力&#xff0c;還容易出錯。今天&#xff0c;我將為大家推薦一款非常實用的在線工具——SQL…

繪制時間對應的數據曲線

頭文件#pragma once #include "ChartControl.h" #include <vector> #include "DBOperate.h&

【挑戰項目】 --- 微服務編程測評系統(在線OJ系統)(二)

三十二、Swagger介紹&使用 官網:https://swagger.io/ 什么是swagger Swagger是一個接口文檔生成工具,它可以幫助開發者自動生成接口文檔。當項目的接口發生變更時,Swagger可以實時更新文檔,確保文檔的準確性和時效性。Swagger還內置了測試功能,開發者可以直接在文檔中…

人事管理系統總結

1.Maven 創建 Spring Boot 項目&#xff1a; 主要使用 Maven 創建 Spring Boot 項目、配置 MySQL 數據庫、回顧 Spring Boot 分層架構、使用 MyBatis 逆向工程生成代碼及整合測試項目等內容&#xff0c;具體如下&#xff1a; Maven 創建 Spring Boot 項目 可通過 IDEA 直接創…

SpringBoot--springboot簡述及快速入門

spring Boot是spring提供的一個子項目&#xff0c;用于快速構建spring應用程序 傳統方式&#xff1a; 在眾多子項目中&#xff0c;spring framework項目為核心子項目&#xff0c;提供了核心的功能&#xff0c;其他的子項目都需要依賴于spring framework&#xff0c;在我們實際…

INT202 Complexity of Algroithms 算法的復雜度 Pt.7 NP-Completeness NP完全性

文章目錄 1.P與NP問題1.1 計算上難以解決的問題&#xff08;Hard Computational Problems&#xff09;1.2 決策問題和優化問題&#xff08;Decision/Optimization problems&#xff09;1.3 計算問題的正式定義1.4 復雜性類1.4.1 復雜性類 P P P1.4.2 證明&#xff08;Certifica…

websocketpp 安裝及使用

介紹 WebSocket 是從 HTML5 開始支持的一種網頁端和服務端保持長連接的消息推送機制。 傳統的 web 程序都是屬于 "一問一答" 的形式&#xff0c;即客戶端給服務器發送了一個 HTTP 請求&#xff0c;服務器給客戶端返回一個 HTTP 響應。這種情況下服務器是屬于被動…

Android NDK 高版本交叉編譯:為何無需配置 FLAGS 和 INCLUDES

引言&#xff1a;NDK 交叉編譯的演進 Android NDK&#xff08;Native Development Kit&#xff09;是開發高性能C/C代碼的核心工具鏈&#xff0c;而交叉編譯&#xff08;在x86主機上生成ARM架構代碼&#xff09;一直是NDK的核心功能。過去&#xff0c;開發者需要手動配置大量編…

AI+可視化:數據呈現的未來形態

當AI生成的圖表開始自動“美化”數據&#xff0c;當動態可視化報告能像人類一樣“講故事”&#xff0c;當你的眼球運動直接決定數據呈現方式——數據可視化的未來形態&#xff0c;正在撕裂傳統認知。某車企用AI生成的3D可視化方案&#xff0c;讓設計師集體失業&#xff1b;某醫…

基于Flink的用戶畫像 OLAP 實時數倉統計分析

1.基于Flink的用戶畫像 OLAP 實時數倉統計分析 數據源是來自業務系統的T日數據&#xff0c;利用kakfa進行同步 拼接多個事實表形成大寬表&#xff0c;優化多流Join方式&#xff0c;抽取主鍵和外鍵形成主外鍵前置層&#xff0c;抽取外鍵和其余內容形成融合層&#xff0c;將4次事…

Java游戲服務器開發流水賬(7)網絡通信簡介

在 Java 游戲服務器開發中&#xff0c;網絡通訊是核心組成部分&#xff0c;它主要負責客戶端與服務器之間的數據交換。 一、網絡通訊基礎 1. 網絡模型 C/S 架構&#xff1a;游戲服務器采用客戶端 / 服務器模式&#xff0c;客戶端向服務器發送請求&#xff0c;服務器處理請求…