本文講的是關於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++數組取地址的一些概念更加清楚。
注:文中可能有所紕漏,歡迎批評指正!也歡迎在本文下方評論交流!