C Primer學習第四天

2021-04-17 23:19:28 字數 2368 閱讀 5182

第四章 陣列和指標

c++語言提供了兩種類似於vector和迭代器型別的低階復合型別——陣列和指標。與vector型別相似,陣列也可以儲存某種型別的一組物件;而它們的區別在於,陣列的長度是固定的。陣列一經建立,就不允許新增新的元素。指標則可以像迭代器一樣用於遍歷和檢查陣列中的元素。     現代c++程式應盡量使用vector和迭代器型別,避免使用陣列和指標。設計良好的程式只有在強調速度時才在類實現的內部使用陣列和指標。    

與vector型別相比,陣列的顯著缺陷在於:陣列的長度是固定的,而且程式也無法知道乙個給定陣列的長度。陣列沒有獲取其容量大小的size操作,也不提供pust_back操作在其中自動新增元素。如果需要更改陣列的長度,程式設計師只能建立乙個更大的新陣列,然後把原陣列的所有元素複製到新陣列空間中去。    

1、陣列的定義和初始化:

type name[const]

type是陣列的型別,規定了存放在陣列中的資料的型別,可以是任意的內建型別或類,也可以是除引用之外的任意一種復合型別;name是陣列的名字;const是陣列的維數,表明陣列中存放的資料元素個數,必須是值大於等於1的常量表示式。

例如:int array[10]定義了可以存放10個int型資料的陣列,名字是array

在定義陣列時可以為其元素提供一組用逗號分隔的初值,這些初值用花括號括起來。

比如:int array = ;

如果定義時沒有提供初值,則陣列元素的初始化規則是:

a、在函式外定義的內建陣列,其元素都初始化為0

b、在函式體內定義的內建陣列,其元素不初始化

c、如果陣列元素是類型別,則使用預設的建構函式初始化,不論陣列是在**定義的。不允許陣列之間直接複製和賦值。    

2、指標指標用於指向物件。

指標儲存的是另乙個物件的位址。指標指向單個物件,迭代器只能訪問容器內的元素。    

指標的定義和初始化:

type *name;

type是指標所指向的物件的型別,name是指標名字。

例:int *p;宣告了乙個指向int物件的指標p    

對指標的賦值和初始化只能使用下面四種型別的值:

a、0值常量表示式

b、型別匹配的物件的位址

d、同型別的另乙個有效指標    

指標操作:

解引用操作返回指向物件的左值,利用這個功能可修改指標所指物件的值:

string s = "badboy";

string *sp = &s;//sp指向s

*sp = "goodboy";//把s的值修改為goodboy    

指標和引用的區別:

引用一經定義就指向乙個固定的物件,並且永遠不能修改;可以修改指標,使其指向另乙個物件。    

指標和const限定符:

const int a = 1;

const int *p = &a;//定義了乙個指向int型常量a的指標,不能通過該指標修a的值,但是可以修改p使其指向另乙個物件。

int b = 2;

int *const p = &b;//定義了乙個常指標,指向非常量b,可以通過該指標修改b的值,但是不可以修改p使其指向另乙個物件。      

3、我的意外收穫

a、陣列名可以作為指標使用,但是不能進行算術操作:

例:int a = ;

cout<<*a#include

#include

#include

#include

using namespace std;

int main()

int p = ;

cout < return 0;

結果是:0012ff54

這很正常,因為p是乙個指標,p的值應該是乙個位址,所以這個結果是正常的。  

#include

#include

#include

#include

using namespace std;

int main()

char p = ;

cout < return 0;

結果是:123

這裡為什麼直接輸出了指標p所指向的內容,而不是指標p自身的位址值呢?

這個與cout對操作符《的過載有關係。就是說cout《對不同的型別會進行不同的操作。如果cout《後面接int型別的指標的話,就會輸出指標的內容,也就是乙個位址。如果cout《後面接char型別的指標的話,就會輸出指標所指向的物件的內容,上例中就是123。          

第四天學習

一 權重關係 樣式表的權重關係 內聯樣式表的權重最大!內部和外部樣式的權重,和書寫的前後順序有關!放在後面的會把放在前面的樣式覆蓋掉 網頁的布局 先做上下排版 再做左右排版 從外往裡 二 css語法 選擇符選擇符 選擇符就是給標籤起名字 型別選擇符 標籤選擇符 所有的html標籤可以直接當做選擇符進...

C 學習第四天

匿名類 原理 編譯器根據初始化值推斷變數的真正型別.var只能在初始化變數時使用 編譯器要根據初始值固化其正真型別 例如var myint 100 編譯器會推斷出myint為int型別。而var myint myint 0 錯誤。因為編譯器無法知道myint的具體型別,也就無法後續對其進行各種操作了...

iOS學習 第四天

1.整數 浮點數如何加入到array中去?nsnumber 2.與nsarray提供的isequaltoarray有什麼區別 3.字串 234 轉為整數 4.實現乙個utility類,提供計算階乘 計算a的b次方 5.在其他,m中使用utility 6.類是否支援多繼承?7.完善parent類實現i...