+
和-
可以將指標向前或向後移動 n 個位元組,n 取決於指標的型別在此計算機中占用的位元組數,使用的方法和普通變數一樣。兩個指標相減則可以得到兩指標間的距離,這種運算只有在兩個指標指向同乙個陣列中的元素時候有意義,可以計算出兩個指標指向的元素之間相隔多少個元素
指標也可以使用==
&!=
&<=
&<
等運算子進行比較,但也是只有當兩個指標指向同乙個陣列的時候這種比較才是有意義的
*
和++
組合的表示式的含義
表示式含義
*p++
或*(p++)
表示式值為*p
,之後自增p
(*p)++
表示式值為*p
,之後自增*p
*++p
或*(++p)
先自增p
,表示式值為自增後的*p
++*p
或++(*p)
先自增*p
,表示式值為自增厚的*p
下面是指標使用運算子的例子:
...
int a[10], *p;
p = &a[0]; //指標 p 指向陣列的第乙個元素
*p = 5; //a[0] = 5
p += 3; //指標向後移動了 3 個單位,現在指向 a[3]
*p = 3; //a[3] = 3
p -= 2; //指向 a[1]
*p = 7; //a[1] = 7
*++p = 9; //a[2] = 9
int *q;
q = p + 6; //q 指向 a[8]
int i;
i = q - p; //i = 6
c語言中,指標和陣列很多方面都是一樣的。比如陣列名可以作為指標,關於陣列a[10]
,陣列名a
就是指向這個陣列第乙個元素的指標,即*a
就是a[0]
,也可以當做個指標傳遞給函式,雖然a
像是個指標,但是不能像指標那樣自加自減改變自己指向的位址。那如何使用這個陣列名來訪問陣列呢?答案是:*(a + n)
這等價於a[n]
那麼指標應該也能看做陣列才對吧。是的!*(p + n)
等價於p[n]
下面的例子是陣列和指標之間轉換的簡單運用:
#include #define max 3
void print_array(int *, int);
int main()
void print_array(int *p, int n)
先建立乙個 3×3 的陣列 a
...
int a[3][3] = ,
,};
...
int *p = &a[0][0];
for (int i = 0; i < 9; i++)
printf("%d ", *p);
...
遍歷整個陣列的元素是最簡單的了,可以把二維陣列想象成乙個一維陣列,指標不斷向後移動就可以遍歷完整個陣列
...
int *p = &a[j][0]; //j 為要遍歷的行的下標,此處也可以為 int *p = a[j];
for (int i = 0; i < 3; i++)
printf("%d ", *p++);
...
若要遍歷某一行的元素,只要讓指標指向這一行的第乙個元素的位址,然後就和遍歷一維陣列一樣了,長度限為一行的長度即可
...
int (*p)[3] = &a[0]; //此處也可以為 int (*p)[3] = a;
for (int i = 0; i < 3; i++)
printf("%d ", (*p++)[j]); //j 為要遍歷的列的下標
...
int (*p)[3]
中p
不是指向int
變數的指標, 而是指向int [3]
(乙個長度為 3 的整形陣列)的指標,稱為陣列指標或行指標,p
自增 1 將向後移 3 個int
的位址,在這裡相當於移動了一行
因為p
是int (*)[3]
型別的指標,所以*p
相當於乙個長度為 3 的整形陣列,所以可已取下標(*p++)[j]
二維陣列其實也是一維陣列,但是它的每個元素都是乙個一維陣列。前面我們講到陣列名可以作指標使用,二維陣列也適用但有所不同,二維陣列a
,a
(即&a[0]
)可以作指向這個陣列第乙個元素的指標,這樣聽起來和一維陣列沒什麼區別呀,但其實這所謂的第乙個元素是乙個一維陣列,這個指標的型別是int [n]
型別,而a[0]
(即&a[0][0]
)才是指向陣列第乙個元素的int
型別的指標,在作為函式引數時要注意指標的型別
#include void fun(int *p);
int main()
int fun(int *p)
指標運算與指標陣列 c語言筆記
指標運算與指標陣列 c語言筆記 1.指標的算術運算 1 指標與整數之間 如p為指標,則p n,p n,p p 還是指標。2 指標與指標之間 若p,q指向統一陣列,且p q,則p q為整數。3 指標之間也可以進行關係運算 同型別 2.賦值運算 同型別的指標可以直接進行賦值操作,如 p q,p n。不同...
C語言學習筆記 指標 指標陣列與陣列指標
指標陣列 是乙個陣列,陣列元素為指標 陣列指標 是乙個指標,指向陣列的指標 例如 int p1 5 int p2 5 對於語句int p1 5 因為 的優先順序要比 要高,所以 p1 先與 結合,構成乙個陣列的定義,陣列名為 p1,而 int 修飾的是陣列的內容,即陣列的每個元素。也就是說,該陣列包...
C語言指標陣列與陣列指標
初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...