靜態數組和動態數組

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爲靜態數組還是動態數組),而非數組的實際長度。

3.用指針指向string類的對象

#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;  
}  

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