C 陣列 2 指標和陣列

2021-08-10 11:43:31 字數 2246 閱讀 9585

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...