網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、C++中的引用類型
在以嚴(yán)蔚敏老師的《數(shù)據(jù)結(jié)構(gòu)》為代表的諸多數(shù)據(jù)結(jié)構(gòu)的書(shū)中,都出現(xiàn)了C++引用這一用法,所以在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的過(guò)程中,有必要認(rèn)識(shí)一下C++語(yǔ)言中的這一用法。
思考:如何在被調(diào)函數(shù)中修改主調(diào)函數(shù)中定義的變量的值?
先來(lái)看看C語(yǔ)言怎么實(shí)現(xiàn):
#include <stdio.h> void modify(int* p) // 由于要接收整型變量的地址,所以p定義為整形指針變量 { (*p) = 5; // 因?yàn)閜接收了main函數(shù)中i變量的地址,故此時(shí)的*p就是main函數(shù)中的變量i } int main() { int i = 10; // 在main函數(shù)中定義的整型變量i modify(&i); // 如果想要通過(guò)modify函數(shù)修改main函數(shù)中變量i的值,就只能發(fā)送變量i的地址 printf("%d\n", i); return 0; }
但在C++語(yǔ)言中,想要在被調(diào)函數(shù)中修改主調(diào)函數(shù)中定義的變量的值時(shí),不需要將其地址傳輸給被調(diào)函數(shù),直接傳輸變量即可,但需要注意的是,被調(diào)函數(shù)的形參類型必須為引用類型,否則就無(wú)法達(dá)到修改主調(diào)函數(shù)中變量的值的目的。以下面的程序?yàn)槔?/p>
#include <stdio.h> void modify(int& p) // 形參為引用類型 { p = 5; // 此時(shí)的p就是就是main中的i // 給p賦值相當(dāng)于給main函數(shù)中的i賦值 } int main() { int i = 10; // 在main函數(shù)中定義的整型變量i modify(i); // 在C++程序中,只需要傳輸變量名即可在modify中修改i的值 // 但前提是,modify函數(shù)的形參必須是引用類型 printf("%d\n", i); return 0; }
此外,C++程序文件的后綴不同于C程序文件的后綴,在創(chuàng)建文件時(shí),記得要將文件名后綴改為改為.cpp
。
二、如何使用C++中的引用類型
在使用C++引用之前。首先要考慮的是,需不需要在被調(diào)函數(shù)中修改主調(diào)函數(shù)中變量的值?
如果需要修改則才需要將將被調(diào)函數(shù)的形參改為引用類型,如果不需要修改則不需要將被調(diào)函數(shù)的形參改為引用類型。
使用方法
先看要修改的變量是什么類型,要修改的變量是什么類型形參就先寫(xiě)什么類型,例如:主調(diào)函數(shù)中要修改的變量為int
類型,則形參先寫(xiě)類型就先寫(xiě)int
;然后在剛寫(xiě)的形參類型后加&
。
牛刀小試:使用C++引用在modify
函數(shù)中修改main
函數(shù)中的指針變量p
的值
#include <stdio.h> #include <malloc.h> void modify(int*& q) // 要修改的變量的類型為int *,則形參為int*& { q = (int *)malloc(sizeof(int)); // 此時(shí)的q就是main函數(shù)中的p // 給q賦值相當(dāng)于給main函數(shù)中的p賦值 } int main() { int * p; modify(p); // 不需要傳輸?shù)刂罚苯影l(fā)送變量即可 return 0; }
上述程序用C語(yǔ)言實(shí)現(xiàn)如下:
#include <stdio.h> #include <malloc.h> void modify(int** q) // 由于要接收指針變量的地址,所以形參必須為二級(jí)指針 { *q = (int *)malloc(sizeof(int)); // 由于q接收了main函數(shù)中p的地址,則q就指向了p // 此時(shí)的*q就是main函數(shù)中的p變量,給*q賦值就是給p賦值 } int main() { int * p; modify(&p); // 要在modify函數(shù)中修改變量p的值,不管變量p是什么類型的變量,都只能通過(guò)傳輸p的地址來(lái)修改 return 0; }
通過(guò)上面兩個(gè)程序可以看出,C++引用屏蔽了C語(yǔ)言中二級(jí)指針的內(nèi)容,但C++引用的本質(zhì)還是指針,所以學(xué)好C語(yǔ)言中的指針是很重要的。如果對(duì)指針的知識(shí)不太了解,可以看看C語(yǔ)言指針知識(shí),當(dāng)然也可以查閱相關(guān)C語(yǔ)言書(shū)籍中指針相關(guān)部分的內(nèi)容。
原文鏈接:https://blog.csdn.net/weixin_65334260/article/details/125728078
相關(guān)推薦
- 2022-11-14 C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解_C 語(yǔ)言
- 2022-09-16 Linux?Shell如何用ssh命令統(tǒng)計(jì)分布式集群信息詳解_linux shell
- 2022-11-07 C語(yǔ)言內(nèi)存函數(shù)?memcpy,memmove?,memcmp_C 語(yǔ)言
- 2022-02-11 為了兼容IE,配置Babel+Webpack
- 2022-07-11 jenkins數(shù)據(jù)遷移和備份
- 2022-04-04 css :清除a元素的默認(rèn)間距
- 2022-11-13 Framework源碼面試之a(chǎn)ctivity啟動(dòng)流程_Android
- 2022-06-21 Oracle新增和刪除用戶_oracle
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支