c primer 讀書筆記十二

2021-08-15 08:05:05 字數 1747 閱讀 9074

指標運算

給乙個指標加上減去某個整數值,結果任然是指標,新元素指向的元素與原來的指標相比前進(後退了)該整數值個位置:

constexpr size_t sz=5;

int arr[sz]=;

int*ip=arr;

int*ip2=ip+4//ip2指向arr的尾元素arr[4]

針超出了上述範圍就將產生錯誤,這種錯誤一般編譯器發現不了

和迭代器一樣,兩個指標相減的結果是它們auto n=end(arr)-begin(arr);到的型別是ptrdiff_t的型別,是一種帶符號的

只要兩個指標指向同乙個元素,或者指向該陣列的尾元素的下乙個位置,就能利用關係運算子對其比較

可以按照如下方式遍歷陣列的元素

int

*b=arr,*e=arr+sz;

while(bint i=0,sz=42;

int*p=&i,*e=&sz;

//兩個無關毫無意義

while(p使用陣列初始化vector物件

不允許使用乙個陣列為另外乙個內建型別的陣列賦值,也不允許使用vector物件初始化陣列,相反的,允許使用陣列來初始化vector物件。要實現這一目的,只需指明拷貝區域的首元素位址和尾後位址就可以了:

int int_arr=

vector

ivec(begin(int_arr),end(int_arr));//初始化陣列

用於初始化vector物件的值也可能僅僅是陣列的一部分:l

vector

subvec(int_arr+1,int_arr+4);

//拷貝三個元素:int_arr[1],int_arr[2],int_arr[3]

3.6多維陣列

嚴格來說,c++語音沒有多維陣列,是陣列的陣列:

當乙個陣列的元素仍然為陣列時,用兩個維度來定義它:乙個維度表示陣列本身大小,另外乙個維度表示其元素大小:

int ia[3][4];//大小為3的陣列,每個元素包含有4個整數的陣列

int arr[10][20][30]=;

//理解這個是,首先arr是乙個大小為10的陣列,每個元素的陣列又都是含有30個整數的陣列

多維陣列的初始化

允許使用花括號括起來的一組值初始化多維陣列,這點和普通的陣列一樣

int ia[3][4]=,,};

與下面的**是等價的

int ia[3][4]=

每一行乙個元素

int ia[3][4]=,,};

//顯示地初始化第1行,其他元素執行值初始化

int ix[3][4]=

初始化的第一行的4個元素,其他元素初始化為0

多維陣列的下標引用

可以使用下標運算子來訪問多維陣列的元素

如果表示式含有下標運算子數量和陣列維數一樣多,該表示式的結果將是給定型別的元素:反之,如果表示式含有的下標運算子數量比陣列維數小,

p114 沒看懂
指標和多維陣列

當程式使用多維陣列的名字時,也會自動將其轉換成指向陣列收元素的指標。

因為多維陣列實際上是陣列的陣列,所以由多維陣列名轉換來的指標實際上是指向第乙個內層陣列的指標:

int ia[3][4];//大小為3的陣列,每個元素是含有4個整數的陣列

int(*p)[4]=ia;

p=&ia[2];

C primer 讀書筆記

第2 章 變數和基本型別 1 變數直接初始化和變數 複製初始化 int ival 1024 direct initialization int ival 1024 copy initialization 初始化不是賦值 2 內建型別復 制初始化和直接初始化幾乎沒有區別 但 對類型別物件來 說,有些初...

C Primer讀書筆記

前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...

C Primer讀書筆記

前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...