淺談C/C++數組取地址


本文講的是關於C/C++數組取地址一些基本的概念,但是新手可能會在學習相關內容時產生一定的困惑,希望本文能幫助到你。

 

 

我們先來看以下一段代碼:

1 #include<iostream>
2 using namespace std;
3 int main(){
4     int array[6] = { 1,2,3,4,5,'\0'};
5     cout<<array<<endl;
6     cout<<&array<<endl;
7     return 0;
8 }

我定義了一個長度為6的int型數組(注意,如果你要親自試一試,不要用char型,因為char型數組會被當作字符串處理,這可能會給你帶來新的困惑,這個我們以后再談。),數組的第六個元素是一個終止符。

cout<<array<<endl;  默認會輸出數組array的首地址,即第一個元素的地址。

cout<<&array<<endl; &是取地址符,這里取的也是第一個元素的地址。

我們可以看到結果如下:

結果確實是相等的。


 

我們再來看下面的代碼:

#include<iostream>
using namespace std;
int main(){
    int array[6] = { 1,2,3,4,5,'\0'};
    cout<<&array<<endl;
    cout<<&array[0]<<endl;
    cout<<&array[1]<<endl;
    return 0;
}

我們可以通過給出數組下標來查找特定元素的地址,比如&array[0],就是取數組第一個元素的地址,&array[1]取的就是第二個元素的地址。我們知道,一個int型元素占4個字節,所以第一個元素和第二個元素的地址應該相差4,我們看看運行結果:

前兩行都是第一個元素的地址,第三行是第二個元素的地址,二者的確相差4個字節。


我們接着看下面的代碼:

#include<iostream>
using namespace std;
int main(){
    int array[6] = { 1,2,3,4,5,'\0'};
    cout<<&array[1]<<endl;
    cout<<&array[0]+1<<endl;
    cout<<&array[0]<<endl;
    return 0;
}

這里的&array[0]+1,意思是取第一個元素的地址,然后加上一個int型的長度,也就是加4個字節,而不是真的加1。加4個字節后其實就等價於取第二個元素的地址,我們來看看運行結果:

前兩個結果是一樣的,對應第二個元素的地址。第三行是&array[0]的結果,可以看到&array[0]+1比&array[0]大了4,而不是1,這點一定要注意。


最后我們來看:

#include<iostream>
using namespace std;
int main(){
    int array[6] = { 1,2,3,4,5,'\0'};
    cout<<&array<<endl;
    cout<<&array+1<<endl;
    return 0;
}

前面我們提到過,&array和&array[0]取的都是第一個元素的地址,而&array[0]+1取的是第二個元素的地址,+1加的其實是4個字節。但這里的&array+1可不再是加4個字節了,加的是整個數組的長度。+1的尺度和+1前面的操作數息息相關,array指代的是整個array數組,而array[0]指代的只是一個元素,所以二者+1時增加的字節是完全不一樣的,這點希望大家能有所體會。由於array是一個長度為6的int型數組,所以+1加的應該是6*4=24個字節,我們來看結果:

可以看到二者相差18,18是十六進制表示,轉化成十進制就是24。

 

希望通過本文,能讓你對C/C++數組取地址的一些概念更加清楚。

注:文中可能有所紕漏,歡迎批評指正!也歡迎在本文下方評論交流!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM