網站首頁 編程語言 正文
如果在C++中定義了一個數組,例如“ int array[5] ”,那么“ array ”或“ &array ”是什么意思?它們是相同的還是不同的?讓我們一探究竟!
要檢查這一點,首先可以想到的是以下程序:
#include <iostream>
using namespace std;
int main()
{
int array[5];
cout<<"array= "<<array<<" ,&array= "<<&array<<endl;
return 0;
}
“ array ”和“ &array ”輸出的地址是相同。雖然地址的內容相同,但它們是不同類型的地址。這才是“ array ”和“ &array ”真正的區別。
為了顯示這種差異,修改一下上面的程序:
#include <iostream>
using namespace std;
int main()
{
int array[5];
cout<<"array= "<<array<<" ,&array= "<<&array<<endl;
cout<<"array+1= "<<array+1<<endl;
cout<<"&array+1= "<<&array+1<<endl;
return 0;
}
運行結果:
?將整數添加到指針時會指向該指針類型的下一個地址。從輸出結果可以看出:
- array+1輸出的結果中地址值相較于array增加了4個字節。
- &array+1輸出的結果中地址值相較于&array增加了20個字節(0x14 bytes)。
通過這個結果可以推斷出:
“ array ”是“指向 array 的第一個元素的指針”,而“ &array ”是“指向 擁有5 個 int 元素的整個數組的指針”。
這個邏輯也可以擴展到多維數組。假設 twoDarray[5][4] 是一個二維數組。這里,“twoDarray”是一個指向擁有4個int型元素數組的指針,而“&twoDarray”是指向擁有5個元素,每個元素是擁有4個int型元素的數組的,數組的指針”。可以使用程序打印測試。?
所以結論是:任何數組名稱本身都是指向數組第一個元素的指針,它更像是&array[0]。 但數組名稱的 &(即地址)是指向整個數組本身的指針。
在使用其它的指針變量通過賦值符號保存地址值時。數組名稱既然代表的是第一個元素,那么聲明指針變量時就是:元素類型* 指針名稱;而對于&數組名稱,就需要聲明一個指向數組的指針保存&array的值,要注意書寫方式,指向數組的指針的書寫方式與指向函數的指針有些類似。
int* p1 = array;
int* p2 = &array[0];
int (*p3)[5] = &array;
如果感覺指向數組的指針書寫形式過于復雜,也可以直接使用auto推斷類型:
int* p1 = array;
int* p2 = &array[0];
int (*p3)[5] = &array;
auto p4 = &array;
本文部分內容參自:What’s difference between “array” and “&array” for “int array[5]” ?
原文鏈接:https://blog.csdn.net/piglite/article/details/125109477
相關推薦
- 2022-08-20 解決WPF繪制矢量圖形模糊的問題_C#教程
- 2022-04-15 C語言各種操作符透徹理解上篇_C 語言
- 2022-04-19 C#多線程系列之線程的創建和生命周期_C#教程
- 2023-01-05 Kotlin?object的幾種用法示例詳解_Android
- 2022-10-10 ASP.NET?MVC使用jQuery?ui的progressbar實現進度條_實用技巧
- 2022-07-14 android?viewflipper實現左右滑動切換顯示圖片_Android
- 2022-05-12 Python 正則替換內容
- 2022-06-30 C語言從基礎到進階全面講解數組_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支