數組和指針

數組

顯示初始化數組元素
如果沒有顯示提供元素初值,則數組會像普通變量一樣初始化:
在函數體外定義的內置數組,其元素均初始化爲0;
在函數體內定義的內置數組,其元素無初始化;
如果元素爲類類型,則自動調用該類的默認構造函數進行初始化;如果沒有默認構造函數,則必須爲該數組的元素提供初始化。

與vector類型不同,數組的長度是固定的。

創建和釋放動態數組
通常在編譯時無法知道數組的維數,所以才需要動態創建該數組

int i = 10
int *p = new int[i];//uninitialized
int *s = new int[5](1,2,3,4,5);//initialized

delete []p;
delete []s;

指針

指針和數組用於低級操作。現代的c++程序採用vector類型和迭代器取代一般的數組、採用string類型取代c風格字符串。

void*指針
C++提供特殊的指針類型void*,它可以保存任何類型對象的地址;
支持有限的操作:
與另一個指針比較;
向函數傳遞void*指針或從函數返回void*指針
給另一個void*指針賦值。
不允許使用void*指針操縱它所指向的對象。

指針的算數操作

ptrdiff_t n = ip2-ip;//ok distance between the pointers

ptrdiff_t是標準庫類型,在cstddef頭文件中定義。是signed整型

c風格字符串標準庫函數
strlen(s) 永遠不要忘記字符串s結束符null;
strcpy(s1,s2) 必須確保目標字符串有足夠大的空間;
strncpy(s1,s2,n) 能拷貝制定長度n的字符串,但如果n比s2中的size長度還要大,數組還是會溢出。

解決辦法:採用string類型取代c風格字符串

多維數組和指針

int ia[3][4];
int (*ip)[4] = ia;
ip = &ia[2];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章