C 陣列名與指標

2021-09-06 03:31:36 字數 1169 閱讀 6612

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...