1. 緣起
由乙個題目引起的:問下面**輸出的是什麼?
const
char
*psz ="
hello world
";int
iarr
=;
cout
<<
sizeof
(psz)
<<
endl;
cout
<<
sizeof
(iarr)
<<
endl;
前者輸出是4,輸出的是psz的型別大小,即指標型別佔4個位元組(在win32下)。
後者輸出是20,即該陣列的長度。
我是直接看到這題答案的,開始沒有多想,但是後來發現陣列名和指標是很相像的,印象裡無論是陣列名和psz都指向一串位址的第乙個位址啊,怎麼sizeof的計算方式不同呢?
2. 實驗
網上的資料說,陣列名是一種實體結構,不僅僅包含陣列第乙個元素的首位址,還包含陣列的整體長度,因此,sizeof能夠得到陣列的整體長度,但是一旦當陣列名作為引數傳遞的時候,其實體特性就沒了,就和指標一摸一樣。
有下面實驗為證:
#include
<
iostream
>
using
namespace
std;
void
f1(char
a) void
f2(char
*a)
intmain() ;
cout
<<
sizeof
(a)
<<
endl;
//輸出8
f1(a);
//輸出4
f2(a);
//輸出4
char*b[
100][
100];
cout
<<
sizeof
(b)
<<
endl;
//輸出40000
char
wait;
cin
>>
wait;
return0;
} 3. 參考資料
c/c++陣列名與指標區別深入探索
C 陣列名與指標
陣列名a代表乙個固定的位址,內涵在於其指代實體是陣列這種資料結構,可以理解為指標常量,但不是指標常量!比如sizeof a 等於5,而sizeof 指標 等於4 另外陣列名a不能用作左值 形參陣列名b是指標變數,在函式fun中可以用作左值。陣列名a作右值時,a代表陣列首元素的位址,而 a代表整個陣列...
陣列名與指標
引言 指標是c c 語言的特色,而陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 很幸運,我的大學老師就是其中之一。時至今日,我日復一日地進行著c c 專案的開發,而身邊...
陣列名與指標
include using namespace std int main int b 2 10 陣列名本身就是指標,再加上 就變成了雙指標,這裡的雙指標的就是指二維陣列 int p int a 1 p指向a陣列的第6個元素 雖然不存在 cout p 1 cout b 1 cout b 0 retur...