c++中:
char arry[ ]="hello world";在棧上分配一個局部數(shù)組。
char *ptr =“hello world”;在全局空間分配一個全局?jǐn)?shù)組。
二者異同:
(i)“hello world!”都是占用13個字節(jié)(其中最后一個為空字符結(jié)束標(biāo)志);
(ii) ptr是一個char *類型的變量,占用4個字節(jié);arry是一個char[13]類型的變量,占用13個字節(jié);
(iii)cout<< ptr<<endl; 輸出hello world!
cout<<*ptr<<endl;輸出h;
cout<<arry<<endl;輸出hello world!
cout<<*arry<<endl;輸出h;
(iv)數(shù)組形參,不能以值傳遞的方式傳遞數(shù)組,可以寫成類似數(shù)組的形式
void print(const int *);
void print(const int [ ]);
void print(const int [10]);//維度表示期待的元素個數(shù),實(shí)際不一定;
即:數(shù)組作為參數(shù)傳遞個函數(shù)時傳遞的是指針而不是數(shù)組,傳遞的是數(shù)組的首地址。
(v)分配內(nèi)存空間不同
ptr是分配一個全局?jǐn)?shù)組,全局?jǐn)?shù)組是全局變量,對應(yīng)內(nèi)存中的全局區(qū)域,保存在普通數(shù)據(jù)段(靜態(tài)存儲區(qū));
arry是分配一個局部數(shù)組,局部數(shù)組是局部變量,對應(yīng)的是內(nèi)存中的棧。