數組
顯示初始化數組元素
如果沒有顯示提供元素初值,則數組會像普通變量一樣初始化:
在函數體外定義的內置數組,其元素均初始化爲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];