指標及其應用2 陣列指標 字串指標

2021-10-01 10:57:32 字數 3119 閱讀 6363

指標與陣列的關係

指向陣列的指標變數稱為陣列指標變數。乙個陣列是一塊連續的記憶體單元組成的,陣列 名就是這塊連續記憶體單元的首位址。乙個陣列元素的首位址就是指它所占有的幾個記憶體單元的首位址。乙個指標變數即可以指向乙個陣列,也可以指向乙個陣列元素,可把陣列名或第 乙個元素的位址賦予它。如要使指標變數指向第 i 號元素,可以把 i 元素的首位址賦予它,或把陣列名加 i 賦予它。

設有陣列 a,指向 a 的指標變數為 pa,則有以下關係:pa、a、&a[0]均指向同一單元, 是陣列 a 的首位址,也是 0 號元素 a[0]的首位址。pa+1、a+1、&a[1]均指向 1 號元素 a[1]。 類推可知 pa+i、a+i、&a[i]指向 i 號元素 a[i]。pa 是變數,而 a,&a[i]是常量,在程式設計時 應予以注意。 

指向陣列的指標

陣列指標變數說明的一般形式為:         型別說明符  *指標變數名      

引入指標變數後,就可以用兩種方法訪問陣列元素了, 例如定義了 int a[5];int *pa=a;     第一種方法為下標法,即用 pa[i]形式訪問 a 的陣列元素。 第二種方法為指標法,即採用*(pa+i)形式,用間接訪問的方法來訪問陣列元素。 

【例 5】scanf 使用陣列名,用陣列名或指標訪問陣列。 

#include#includeusing namespace std;

int main()

輸入:1 2 3 4 5 

輸出:a[0]=1

a[1]=2

a[2]=3

a[3]=4 

a[4]=5 

【說明】

①、直接拿 a 當指標用,a 指向陣列的開始元素,a+i 是指向陣列的第 i 個元素的指標。 

②、指標變數 pa 是變數,可以變的。但陣列 a 是靜態的變數名,不可變,只能當做常 量指標使用。例如:p=p+2;是合法的,a=a+2;是非法的。

③、最早在使用標準輸入 scanf 時就使用了指標技術,讀入乙個變數時要加取位址運算 符』&』傳遞給 scanf 乙個指標。對於陣列,可以直接用陣列名當指標。

指標也可以看成陣列名

指標可以動態申請空間,如果一次申請多個變數空間,系統給的位址是連續的,就可以當成陣列使用,這就是傳說中的動態陣列的一種。 

【例 6】動態陣列,計算字首和陣列。b是陣列 a 的字首和的陣列定義:b[i]=a[1]+a[2] +…+a[i],即b[i]是 a 的 i 個元素的和。 

#includeusing namespace std;

int n;

int *a;//定義指標變數a,後面直接當陣列使用

int main()

輸入:

51 2 3 4 5

輸出:1 3 6 10 15 

【說明】

動態陣列的優點:在 oi 中,對於大資料可能超空間的情況是比較糾結的事,用小陣列 只的部分分,大陣列可能爆空間(得 0 分)。使用「動態陣列」,可以在確保小資料沒問題的 前提下,盡量滿足大資料的需求。

指標與字串

字串的表示形式在 c++中,我們可以用兩種方式訪問字串。 

(1)用字元陣列存放乙個字串,然後輸出該字串。

int main()

(2)用字元指標指向乙個字串。可以不定義字元陣列,而定義乙個字元指標。用字元指標指向字串中的字元。 

int main()

在這裡,我們沒有定義字元陣列,而是在程式中定義了乙個字元指標變數 str,用字串常量"i love china!",對它進行初始化。c++對字串常量是按字元陣列處理的,在記憶體中開闢了乙個字元陣列用來才存放該字串常量。對字元指標變數初始化,實際上是把字串第 1 個元素的位址(即存放字串的字元陣列的首元素位址)賦給 str。有人認為 str 是 乙個字串變數,以為在定義時把"i love china!"這幾個字元賦給該字串變數,這是不 對的。

實際上,

char *str="i love china!";
等價於:

char *str; 

str="i love china!";

可以看到,str被定義為乙個指標變數,指向字元型資料,請注意它只是指向了乙個字元變數或其他字元型別資料,不能同時指向多個字元資料,更不是把"i love china!"這些字元存放到 str 中(指標變數只能存放位址)。只是把"i love china!"的第乙個字元的位址賦給指標變數 str。 

在輸出時,要用:

printf(「%s\n」, str);
其中「%s」是輸出字串時所用的格式符,在輸出項中給出字元指標變數名,則系統先輸出它所指向的乙個字元資料,然後自動是 str 加 1,使之指向下乙個字元,然後再輸出一 個字元……如此知道遇到字串結束標誌「\0」為止。 

注意:可以通過字元陣列名或者字元指標變數輸出乙個字串。而對乙個數值型陣列,是不能企圖用陣列名輸出它的全部元素的。 例如:

int i[10];

…… printf(」%d\n」, i);

這樣是不行的,只能逐個輸出。顯然 %s 可以對乙個字串進行整體的輸入和輸出。

字串指標作函式引數

將乙個字串從乙個函式傳遞到另外乙個函式,可以用位址傳遞的方法,即用字元陣列 名作引數或用指向字元的指標變數做引數。在被呼叫的函式中可以改變字串內容,在主調 函式中可以得到改變了的字串。 

【例 8】輸入乙個長度最大為 100 的字串,以字元陣列的方式儲存,再將字串倒序儲存, 輸出倒序儲存後的字串。(這裡以字元指標為函式引數)

#include#includeusing namespace std;

void work(char* str)

int main()

輸入:

!anihc evol i 

輸出:i love china! 

指標陣列,陣列指標,字串與指標

在研究指標陣列與陣列指標的時候,遇到了這個困惑,後面解答。void test02 char c 4 char p2 4 指標陣列 for int j 0 j 4 j for int i 0 i 4 i 指標陣列是陣列,即乙個陣列中,每個元素都是指標 void test05 注意這一行和最後一行的區別...

C 字元 字串 字元陣列 字串指標 指標陣列

一 c 字元 字串 字元陣列 字串指標 指標陣列 前言 一 字元指標 字元陣列 二 字串指標 三 字串 指標陣列 四 常用方法 參考為了深入理解c 並時常回顧學過的知識點,對c 知識點進行記錄總結。參考1字元指標的儲存方式 字元指標變數本身是乙個變數,用於存放字元 字串的首位址。字串本身是存放在以該...

指標字串和陣列指標

指標是c語言的精髓,只有掌握好指標才算是真正學會了c語言,以下就是學習指標的例子 include main int n 5 sort name,n print name,n if strcmp1 name 0 name 1 0 printf s,s n name 0 name 1 if strcmp...