數組
①顯式初始化的數組不需要制定數組的維數值;
int arr[] = {0,1,2}; //[]中維數值可以省略
②vector使用vector::size_type作爲下標的類型,數組下標類型是size_t;
int main()
{
const size_t array_size = 7;
int ia1[] = {0,1,2,3,4,5,6};
int ia2[array_size]; //使用size_t類型數值來定義數組大小
for (size_t ix = 0; ix != array_size; ++ix) //從ia1複製數據到 ia2
ia2[ix] = ia1[ix];
return 0;
}
指針
①指針相減用標準庫類型ptrdiff_t(signed整型)數據儲存(在cstddef頭文件中定義)
#include<cstddef>
int ia[] = {0, 2, 4, 6, 8};
int *ip = ia;
int *ip2 = ip + 4;
ptrdiff_t n = ip2 - ip1;
//這個數值爲signed整型數據,表示位置關係
②指針下標
int *p = &a[2];
於是 p[1] == *(p + 1) //相當於a[3]
p[-2] == *(p - 2) //相當於a[0]
③指向const 對象的指針
指向const對象的指針必須具有const特性(即使木有,也默認有了)
const double pi = 3.14;
double pi2 = 2.7;
double *ptr = π //錯誤,pi具有const特性
const double *cptr = π //ok,
const double *cptr2 = &pi2; //ok,但不能通過*cptr2修改pi2的值.
PS:這種指針可以更改指向,不可更改所指向的值.
④const指針
具有const特性的指針,定義時需要初始化,並且不能更改.
int Numb = 0;
int *const curErr = &Numb; //一旦初始化,指向不能更改.
PS:這種指針不可更改指向,但可以更改所指向的非const對象的值.
⑤指向const對象的const指針.(③+④)
const double *const pi_str = π
PS:既不能更改指向,也不能更改所指向的值.
動態創建數組(使用new和delete)
一,定義與初始化
int *pia = new int[10]();
//創建含有10個元素的數組,在數組後的圓括號()是對編譯器初始化數組的要求,所有元素置爲0.
二,動態分配空數組.
size_t n = get_size(); //get_size()是一個獲取用戶提供值的函數
int *p = new int[n]; //動態創建維數值爲n的int數組並返回數組第一個元素的地址,保存於p指針中
for(int*q = p; q != p+n; q++)
{} //對該數組進行操作
三,動態空間釋放.
delete [] pia;
//此處的方括號[]很重要,告訴編譯器所釋放的是一個數組,若缺少,內存只會釋放數組的一個元素的空間,從而產生內存泄漏(memory leak).
C++ PRIMER中 C風格的字符串 也是數組一大知識點,但它告訴我們要儘量避免使用C風格的字符串,
應該儘量使用c++所提供的標準庫string類型.不僅簡單,容易理解,而且不易出錯.個人還是偏向使用string類型對象,
所以本篇就省略對 C風格的字符串 的相關筆記, 有需要時再作整理.