指標和陣列

2021-08-19 18:44:28 字數 3251 閱讀 8603

**塊

int i = 10;

int*p = &i;

記憶體分析

使用解引用符 * 對該指標指向的記憶體進行操作

**塊

利用指標變數改變i的值

int i = 10;

int*p = &i;

*p = 20;

**塊

int arr[4];
記憶體分析

指標和陣列本身沒有任何關係,只是在訪問指標或陣列的時候有兩種訪問方法:

1).以指標的形式訪問

2).以下標的形式訪問

char *p = "abcde";

char p = "12345";

讀取字元c

1).以指標的形式訪問:*(p+2)

先取出p中的位址值,再加上2個字元的偏移量,得到新的位址,然後取出這個位址存放的值

2).以下標的形式訪問:p[2]

編譯器會將下標的形式轉化為指標的形式然後進行才操作

讀取字元『4』

1).以指標的形式訪問:*(p+3)

這時p代表的是陣列首元素的位址,再加上3個元素大小(這裡是字元)的偏移量,得到新的位址,然後取出這個位址存放的值

2).以下標的形式訪問:p[3]

編譯器會將下標的形式轉化為指標的形式然後進行才操作

所以兩種訪問形式在本質上是相同的

1)指標陣列是乙個陣列,它裡面的元素都是指標

2)陣列指標是乙個指標,它指向的是乙個陣列

&arr 與 arr的區別arr表示陣列首元素的位址,&arr表示陣列的位址,兩者在數值上是相同的,但意義不同

函式指標的定義

int fun(int x ,int y);//fun函式的宣告

int (*p)(int x,int y);//fun函式對應型別的函式指標p的定義

p的型別為int (*)(int,int),這表示p是乙個函式指標,函式的引數有兩個型別都是int,函式的返回值型別為int

函式指標的使用

int fun(int

x ,int

y)int a,b;

int (*p)(int

x,int

y) = fun;

(*p)(a,b);//與fun(a,b)相同

注意:函式指標的可賦的值只能是與之型別相對應的指標

這是乙個陣列,其中的元素是函式指標

下面分別是實現加減乘除功能的四個函式的宣告,他們的函式引數個數型別即函式返回值的型別均相同,故可以將他們的函式位址都放在同乙個函式指標陣列中

int add(int x ,int y);

int sub(int x ,int y);

int mul(int x ,int y);

int div(int x ,int y);

int (*p[4])(int x,int y);

pf[0] = add;//可直接用函式名賦值

pf[1] = ⊂//也可以用取位址符&加上函式名

//函式呼叫

pf[0](a,b);

pf[1](a,b);

將在同一時刻可能呼叫相同型別的不同函式的**簡化

#define _crt_secure_no_warnings

#include

int add(int

x, int

y)int sub(int

x, int

y)int mul(int

x, int

y)int div(int

x, int

y)int meau()

int main()

; char ch[4] = "+-*/";

do} while (input);

return

0;}

上面**可通過轉移表轉化為下面的**

#define _crt_secure_no_warnings

#include

int add(int

x, int

y)int sub(int

x, int

y)int mul(int

x, int

y)int div(int

x, int

y)int meau()

int main()

;//函式指標陣列

char ch[4] = "+-*/";

doelse

if (input == 0)

else

} while (input);

return

0;}

這句話看起來很難理解,其實這就是乙個指標,只不過它指向的是乙個函式指標陣列

上面已經定義了乙個函式指標陣列,再定義乙個指標指向這個陣列,這個指標即為函式指標陣列指標

int (*pf[4])(int

x,int

y);int (*(

*p)[4])(int

x,int

y) = &pf;//p即為函式指標陣列指標

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...

指標陣列和陣列指標

該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...