1.陣列標準庫函式begin和end
這兩個函式與容器中的同名函式相類似,得到陣列首指標和尾指標.陣列不是類型別,所以不是成員函式.需要注意的是尾指標不能解引用和遞增操作.
int a[5] = ;
int*beg = begin(a); //beg指向a首元素的指標
int*last = end(a); //last指向a尾元素下一位置的指標
while(beg != last)
2.陣列指標運算
1.指向陣列的指標可以執行所有迭代器運算,包括自增,自減,比較,解引用,與整數相加,兩個指標相減等.
2.乙個指標加(減)乙個整數,結果任然是指標,新指標指向的元素與原來相比前進(後退)了整數個位置.
3.兩個指標指向同乙個陣列的元素或尾元素下乙個位置,就可以進行比價和加減運算,如果兩個指標分別指向不相干的物件,則不能比較.指標相減得到一種名為ptrdiff_t的標準庫型別.
4.對陣列進行運算實際上是對指向陣列元素的指標進行下標運算.(標準庫下標為無符號,內建下標可以為負數).
int a[5] = ; //含有5個整數的陣列
int i = a[2]; //把第3個值賦值給i
int*p = a; //p指向a的首元素
i = *(p+2); //等價於i=a[2]
int*q = &a[2]; //q指向索引為2的元素
int j = q[1]; //q[1]等價於*(
q+1),即a[3]
int k = q[-2]; //q[-2]指向a[0]
3.c風格的字串
c++支援c風格字串,但是最好不要使用,容易因為記憶體越界引起程式漏洞.c風格字串不是一種型別,而是為了表達和使用字串的一種寫法,以空字元結尾,通常用指標操作.
4.c標準庫string函式
使用此類函式的字串必須以空字元結尾,否則函式會一直尋找空字元,出現不可預料的結果.並且c風格字串很容易造成記憶體越界,有著嚴重的安全漏洞.
strlen(p); //返回p的長度,不計算空字元
strcmp(p1,p2); //比較p1,p2,p1=p2返回0,p1>p2返回正數,p1strcat(p1,p2); //將p2附加到p1結尾,返回p1
strcpy(p1,p2); //將p2拷貝給p1,返回p1
char ca = ; //不以空字元結尾
cout
<< strlen(ca) 很多c++程式在標準出現以前就寫好,肯定沒有使用string和vector型別,而且有些程式實際上就是c++和c的介面,也無法使用c++標準庫,所以現在c++程式不得不與充滿陣列和c風格字串的**銜接,c++提供了一組功能.
1.混用string物件和c風格字串
*允許使用以空字元結尾的字串初始化string物件或為string物件賦值.
*在string加法運算中允許以空字元結尾的字串作為其中乙個物件(不能兩個都是).
以上性質不能反過來,所以為string提供乙個c_str()的成員函式.
char *str = s; //錯誤,不能用string物件賦值char*
const
char *str = s.c_str(); //正確
2.使用陣列初始化vector物件
*不允許使用vertor物件初始化陣列,但是允許陣列初始化vector物件.
int p = ;
vector
ivec(begin(p),end(p));
vector
subvec(p+1,p+4); //使用部分陣列建立物件,p[1],p[2],p[3]
6.建議
盡量使用標準庫型別而非陣列,使用指標和陣列容易出錯,一是指標常用底層操作,容易引起細節錯誤.二是語法錯誤,特別是宣告時.
現在c++應盡量使用vector和迭代器,避免使用內建陣列和指標,盡量使用string型別變數,避免c風格字串.
5 3指標和陣列
定義乙個大小為10的陣列a 10 int a 10 包含了a 0 a 1 a 9 共計10個元素 定義指標 int pa pa指向陣列a的第0個元素,即pa為a 0 的位址。pa a 0 對陣列元素a i 的引用也可以寫為 a i 這樣的形式,這一點至少初看起來很令人吃驚。在求陣列元素a i 的值時...
(17)指標和陣列
在c 語言中,指標和陣列有非常緊密的聯絡,使用陣列的時候編譯器一般會把它轉換成指標。對陣列的元素使用取位址符就能得到指向該元素的指標。陣列有乙個特性 在多數用到陣列名字的地方,編譯器都會自動的將其替換為乙個指向陣列首元素的指標。當使用陣列作為乙個auto變數的初始值時,推斷得到的型別是指標而非陣列。...
12 指標和陣列
指標和陣列 不是陣列的專屬 注意 其實陣列就是指標,指標也是陣列 陣列名 include intmain 指向陣列首元素的指標 include intmain int argc,char argv int p null p指標變數指向首元素 p a 0 p a int i 0 for i 0 i 1...