4.1、陣列
1、陣列的初始化:
在函式體外定義的內建陣列,都初始化為0;在函式體內的內建陣列,均無初始化; 顯示顯示初始化則可不必制定陣列的維數
初始化如果元素為類型別,則自動的條用該類預設的建構函式
2、特殊字元陣列
char ca="c++"; //會自動的在c++後新增乙個空的字元'\o',而char ca2=;ca2的長度則為3.
3、不允許陣列想vector那樣直接用乙個陣列初始化另乙個陣列。陣列用下標取值。
4.2、指標
1、指標儲存的是另乙個物件的位址,&是取位址符號,如定義乙個指標 string s="hello"; string *sp=&s; cout<<&sp;
解操作: int a = ; int *ap = a; cout<<*ap;
現在程式衝使用vector型別和迭代器代替陣列和指標,使用string型別代替c風格字串
2、指標初始化
對指標初始化只能使用以下四種型別的值:
1)0值常量表示式,也可以是
2)型別匹配的物件的位址
4)同型別的有效指標
void指標 void*可以儲存任何物件的位址,不允許使用void*指標所指物件的位址
3、指標的操作
生成左值的解引用操作*sp,給指標直接賦值即可改變指標的值,如 *sp = "hello" 指標所指物件的值發生了改變,
指標和引用的區別
a:引用定義時必須初始化,指標則不必
b:賦值是,對引用的賦值,改變的是引用物件的值,對指標的賦值,改變的是指標所指的物件
如: int i1=1.i2=2; int *p1=&i1,*p2=&i2; p1 = p2;此時p1指的是p2
int i1 = 12,i2=20; int &r1 = i1, &r2 = i2; ri=r2; r1還是i1的引用,但i1的值變為20
用指標訪問陣列元素, c++允許計算陣列或者物件的超出末端的位址,但不允許對位址進行解操作。
指標是陣列的迭代器
4、指標和const限定符
有兩種型別
const int *sp =&i : 表示i的值不能被改變
int *const sp =&1 :表示sp指向i,不能被改變指向
還有指向const物件的const指標
typedef和指標: 如typedef string *pstring const pstring sp是那種型別的指標,應該是 string *const sp這個型別的
4.3、c風格字串
1、c風格字串以null結尾
const char *c = "hell world";
while(*c);ca就沒有null長度為2
2、動態的建立陣列
動態的建立陣列用new,存放位置在堆或者自由儲存區(c++中把記憶體分為全域性靜態區、堆、棧、自由儲存區、常量區)
int *pa = new int[10]; //沒有初始化
int *pa = new int [20](); //全部初始化為0
對於new動態分配的空間,要用delete刪除, 但是陣列的刪除一定要在前面加, 去 delete pa;不然將導致程式在執行時出錯。
4.4、新舊**的相容
char *ch = st.c_str(); 返回乙個c風格字串
其中 c_str返回的陣列應不一定是有效的,接下來對st2的操作很有可能會改變st2的值,使得返回的陣列失效。此時應該是複製c_str函式的返回陣列
第四章 陣列和指標
由於陣列和指標這部分知識比較深奧,本菜鳥決定將c和c 的指標部分的知識點全歸到c語言部分來整理,所以這裡就只總結一些題目。下列陣列的值是什麼?string sa 10 int ia 10 int main 解答 sa 和sa2 為元素型別為string 的陣列,自動呼叫string 類的預設建構函式...
第四章 陣列和指標
陣列 首先陣列的初始化不允許直接複製和賦值,陣列的元素的型別是size t型別,可以通過for size t ix 0 ix!array size ix 指標 指標的定義 int p 注意 在使用指標之前必須要初始化指標。並且對指標初始化的值應該使用如下四種值 1 0值常量表示式。例如和疑惑的0值得...
C Primer 第四章 陣列和指標
4.2指標的引入 1.指標變數的定義 string pstring 語句把pstring定義為乙個指向string型別物件的指標變數。或者也可以如下定義 string ps 如果需要再乙個宣告語句中定義兩個指標,必須在每個變數識別符號前再加符號 宣告 string ps1,ps2 4.指標可能的取值...