數組分析

#include <iostream>
using namespace std;


void main(int argc, char* argv)
{
int arr1[6] = { 0, 1, 2, 3, 4, 5 };
//直接使用數組名
cout << "數組名代表指向數組第一個元素的指針:\n";
cout << "arr1:" << arr1 << endl;
cout << "*arr1:" << *arr1 << endl;
cout << "arr1[0]" << arr1[0] << endl;
cout << "arr1+1:" << arr1 + 1 << endl;
cout << "*(arr1+1):" << *(arr1 + 1) << endl;
cout << "arr1[1]:" << arr1[1] << endl;
// "說明數組名代表指向第一個元素的指針,步長爲單個數組元素所佔用的字節數\n";
//對數組名使用&進行取地址操作:"對數組名取地址意味取得指向該數組的指針,即得到的是指向‘整個數組’的指針:\n";
cout << "&arr1:" << &arr1 << endl;
cout << "*(&arr1):" << *(&arr1) << endl;
cout << "&arr1 + 1:" << &arr1 + 1 << endl;
//由結果可以看到,&arr1 得到的地址跟直接使用數組名的地址是一樣的,但是需要注意的是,對數組名‘取地址’操作以後所得到的地址只是值一樣,他們都屬於指向某一地址的指針(此處爲指向數組首地址),但是其指針類型是不同的;直接使用數組名,其指針類型就是指向‘數組元素類型的指針’,而對於取地址後得到的指針,其指針類型是‘指向數組類型的指針’,此處具體的區別就在於其步長不同。前者步長爲單個數組元素,而後者步長則是整個數組。";

cout << "下面分析多維數組:\n";
int arr2[2][5] = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 } };
cout << "arr2 :" << arr2 << endl; 
//‘取地址操作’,得一個arr2數組的‘元素’,即得到的是第一個數組           
cout << "*arr2 :" << *arr2 << endl;   
//與上一條語句效果相同  
cout << "arr2[0] :" << arr2[0] << endl; 
//得到指向‘第二個元素’的指針,即指向第二個數組的指針 
cout << "arr2 +1 :" << arr2 + 1 << endl;  
//‘接引用操作’,得到arr2數組的‘元素值’,即得到的是第二個數組
cout << "*(arr2 + 1) :" << *(arr2 + 1) << endl; 
//與上一條語句效果相同 
cout << "arr2[1] :" << arr2[1] << endl;
//對‘第一個數組’進行地址+1操作,此時,步長爲第一個數組內的元素字節數           
cout << "(*arr2)+1 :" << (*arr2) + 1 << endl;
//取上一句得到的地址中的值     
cout << "*((*arr2)+1) :" << *((*arr2) + 1) << endl;   
//對‘第二個數組’進行地址+1操作,此時,步長爲第二個數組內元素的字節數
cout << "*(arr2+1)+1 :" << *(arr2 + 1) + 1 << endl;  
//對上一句得到的地址中的值
cout << "*(*(arr2+1)+1) :" << *(*(arr2 + 1) + 1) << endl;  
//對整個數組arr2進行取地址&操作,得到的則是指向整個二維數組的指針,其步長爲整個二維數組,此處步長爲10*sizeof(int)==40字節
cout << "&arr2 +1 :" << &arr2 + 1 << endl; 
}    

二維數組分析與一維數組其實是一樣的,對於此處的二維數組,其數組名代表的指向數組arr2第一個‘元素’的指針而在此處,應該把‘元素’理解爲一個數組,此處一個‘元素’爲一個帶有5個整型元素的數組,也就是說arr2的步長是5*sizeof(int)=20字節,因而,數組名是一個指向整個數組的指針,具體表現爲指向第一個數組的指針;而對於*arr2和arr2[1],是對數組的解引用和取值操作,其得到的雖然在數值上和arr2一樣,但是含義是不同的,*arr2和arr2[0]所得到的是第一個數組內,指向該數組‘第一個元素’的指針,而此處的元素,則是理解爲一個‘整數元素’了,也就是說此處*arr2和arr2[0]所得到的指針的步長是一個整型所佔字節,即4字節。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章