C語言中的數組,按照理解分爲兩種:
1 狹義的數組,指的是以
TYPE name[M]...;
形式定義的數組,也稱爲靜態數組。靜態數組在定義的時候就確定了數組的大小,無法在運行中對其做改變。
2 廣義的數組,除靜態數組外,還包括動態數組。
動態數組的本質爲指針,如
TYPE *name;
對指針上可以用malloc等函數,分配內存空間,實現與靜態數組類似的操作。對於動態數組,可以使用realloc函數,
void * realloc(int size, void *p);
重新分配參數p上的內存大小爲參數size。
新返回的的地址值,可能與參數p的原始地址值不同。
該函數可以使p上可使用的內存大小調整到size字節,從而實現動態數組大小的調整。
1.對靜態分配的數組和動態分配的數組分別使用sizeof獲得其長度,結果是不一樣的:
int a[10]; 則sizeof(a)等於10*sizeof(int)。
int* a=(int*)malloc(10*sizeof(int));則sizeof(a)等於sizeof(int*)。
2、數組名作爲函數的參數時
數組名作爲函數的參數傳遞時,在函數內使用sizeof(a)(此處假設a爲數組),結果都爲指針的長度(無論a爲靜態數組還是動態數組),而非數組的實際長度。
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s = "hello";
//定義一個char類型指針,把string s的首元素地址賦給pt,則pt指向字符串s.
char *pt = &s[0];
cout << pt << endl;
return 0;
}