2020-12-13:一文讀懂“&引用”、“&取地址”和“*解析地址”的使用
一文讀懂“&引用”、“&取地址”和“*解析地址”的使用
C++中才支援&引用的使用,C語言中僅支援&取地址,*解析地址的使用,請讀到文章的同志們注意,謝謝!
& 引用
常規引用
引用就是某一變數(目標)的一個別名,對引用的操作與對變數直接操作完全一樣。
作為引用的時候,必須在定義時候就進行初始化,若不進行初始化則會編譯報錯。
int N;
int &rN = N;
引用建立之後,後面操作建立的引用rN,也會同步到變數N上;
使用示例
#include <stdio.h>
int main()
{
int N = 10;
int &rN = N;
rN = rN - 5;
printf("N: %d\n", N);
return 0;
}
*******
N: 5
*******
函式中使用引用function(int &i)
函式中傳遞形參如果是int &i的形式,也是變數的引用,具體示例如下
正常建立的函式
int function(int i){
i++;
return i;
}
使用引用變數作為形參的函式
int functionReference(int &i){
i++;
return i;
}
使用示例
int x = 5;
function(x); // result: 6; x: 5
functionReference(x); // result: 6; x: 6
& 取地址
&作為取地址用的時候,要跟指標聯絡在一起,因為指標就是用來存放地址的。
取地址就是你想取某變數(形參或者實參)的地址就用 & 前置表示要取地址了,取的是該變數的記憶體地址。
int N = 100; // 定義變數N
int *p; // 定義整形指標p
p = &N; // 取變數N的地址,並使指標p指向改地址
使用示例
#include <stdio.h>
int main()
{
int N = 100;
int *p;
p = &N;
printf("N: %d\n", N); // N的值
printf("&N: %d\n", &N); // N的地址
printf("p: %d\n", p); // p的值
printf("*p: %d\n", *p); // p存放的地址,取地址對應空間存放的值
return 0;
}
&引用 和 &取地址的區別
引用的格式:
型別名 & 別名 = var;
1.定義的時候必須初始化,即& 前面有類名或型別名,&別名後面一定帶 “=” (在= 左邊);
2.&後面的別名是新的名字,之前不存在。
&取地址時:
如果&是取址運算子,也就意味著取一個變數的地址並付給指標變數。&後面緊跟的是變數(已存在);
* 解析地址,取地址空間中存放的值
*a表示:取出變數a中對應儲存地址空間中的值;首先,要求a對應的儲存單元中的資料一定是另一個儲存單元的地址。
int a;
變數a 本質上代表一個儲存單元。CPU通過該儲存單元的地址訪問該儲存單元中的資料。
所以a本來代表兩個值:儲存單元的地址和儲單元中的資料。
於是就有了二異性。
為了消除這種二義性,C語言規定a表示儲存單元中的資料,&a表示儲存單元的地址。
a儲存單元中的資料可以是一個普通數值,也可以是另一個儲存單元的地址,比如:a = &b;
語句就是將b的儲存單元的地址存入a儲存單元中。C語言規定*a代表a中儲存的地址對應的儲存單元中的資料,也就是訪問*a就等於訪問b,於是*a提供了通過a訪問b中的資料的手段。
a表示a對應的儲存單元中的資料。
&a表示a對應的儲存單元的地址。
使用示例
int a = 12;
int *b;
b = &a;
printf("a: %d\n", a); // 12
printf("b: %d\n", b); // 6422024
printf("*b: %d\n", *b); // 12
最後,在C語言裡地址叫指標。還有,在C語言中的陣列本質上其實也是指標,即:*a 等同於 a[]。
至於陣列和指標之間的實踐,可以參考另外一篇實踐;
C++語言中採用&引用的使用;C語言沒有&引用,在此說明,請注意!!!
完整示例如下:
#include <stdio.h>
int function(int i){
i++;
return i;
}
int functionReference(int &i){
i++;
return i;
}
int main()
{
int N;
int &rN = N;
N = 10;
rN -= 5;
printf("N: %d\n", N);
int i = 100;
printf("i: %d\n", i);
printf("function(i): %d\n", function(i));
printf("i: %d\n", i);
printf("functionReference(i): %d\n", functionReference(i));
printf("i: %d\n", i);
return 0;
}
PS
主要介紹 &引用、&取地址和*解析地址的使用和區別,僅為記錄總結之用!
相關文章
- PHP取地址符(引用符)&詳解PHP
- java獲取ip地址和mac地址JavaMac
- Java 中獲取MAC地址 和IP地址JavaMac
- 一文讀懂前端快取前端快取
- ARP(地址解析協議)和RARP(逆地址解析協議)協議
- 匯入地址表鉤取技術解析
- JQuery線上引用地址整理jQuery
- 一文讀懂瀏覽器快取瀏覽器快取
- ASPNET獲取IP地址 MAC地址Mac
- 詳解C++中指標(*)、取地址(&)、解引用(*)與引用(&)的區別 (完整程式碼)C++指標
- 取IP地址的方法
- 如何使用 Go 獲取你的 IP 地址Go
- IP地址和MAC地址的關係Mac
- C++ 引用和指標:記憶體地址、建立方法及應用解析C++指標記憶體
- jQuery JS檔案引用地址jQueryJS
- Fuzzing: 一文讀懂Go Fuzzing使用和原理Go
- C語言中取地址符&做函式形參?—— 引用的討論C語言函式
- css中圖片的四種地址引用CSS
- 一文讀懂DHCP的工作原理和作用
- 一文讀懂 JavaScript 和 ECMAScript 的區別JavaScript
- 獲取URL地址
- 最簡單的C# 獲取 MAC 地址 IP 地址C#Mac
- ARP協議 地址解析協議:IP地址轉換為MAC地址協議Mac
- 獲取配置的mock地址Mock
- php引用discuz地址獲取關鍵詞(www.rijigu.com)PHP
- 關於地址反向解析
- 一文讀懂BeanFactory和FactoryBean區別Bean
- 一文讀懂mavenMaven
- 使用linux三劍客取ip地址Linux
- Qt/C++地址轉座標/座標轉地址/逆地址解析/支援百度高德騰訊和天地圖QTC++地圖
- 【Go】獲取使用者真實的ip地址Go
- 【Go】獲取使用者真實的 ip 地址Go
- saltstack獲取IP地址
- 獲取IP地址方法
- 獲取IP地址命令
- 讀者下載地址
- 硬解析和物理讀取與軟解析和邏輯讀取
- 一文讀懂資料鑽取-騰訊雲開發者社群