高階指標的運用

2021-08-11 06:59:25 字數 3284 閱讀 1510

首先來複習一下指標與陣列

陣列:存放相同型別資料的集合

和陣列類似的還有結構體,結構體是存放不同型別資料的集合

需要注意的是:雖然指標和陣列在這裡被拿來一起比較,但它們是兩種型別,沒有關係。只是有相同或相似的特性。

看一下下面的**及其執行結果:

printf("%d\n", strlen(*p)); //報錯,型別不同

strlen是函式,*p以\0為結束標誌

陣列名代表整個陣列時只有兩種情況:

sizeof(陣列名),這裡的陣列名代表整個陣列

&陣列名,這裡的也是

指標陣列

指標陣列的本質是陣列,是存放指標的陣列

形式是int *arr[10];

陣列指標

指標分為整形指標和浮點型指標

整形指標:

int *pint;能夠指向整形資料的指標

浮點型指標:

float *pfn;能夠指向浮點型資料的指標

以int (*p)[10]為例

在這之中,p是指向陣列[10]的指標,是陣列指標

(*p)是指標,指向乙個大小為10的整形陣列

[ ]的優先順序大於*,所以要給*p加上()以保證 * 先和p結合。

假如是二維陣列的,如 int a[3][10]

則3(第乙個)可省略,但是10(第二個)不可省略

分析以下**:

arr表示陣列首元素的位址

&arr表示陣列的位址

是因為陣列的位址和陣列首元素的位址值是相同的,但是意義不同,所以arr和&arr位址值相同,但是arr+1和&arr+1位址值不同

那麼陣列的位址應該如何儲存呢?

結果顯示,雖然兩種方法列印的位址是一樣的,但是第一種方式會有警告,顯然p2是比較合適的選擇。

p2是數組織在,所以存放陣列的位址是合適的。

二維陣列傳參

由上圖可知,int (*parr2)[10]; 中parr並未初始化

指標和陣列的定義和宣告

從乙個例子來分辨定義和宣告

//陣列的定義

char arr = "abcdef";

//指標的定義

char* p = "abcdef";

extern char arr;

extern char* p;

int main()

在main.c中的extern表示arr和p是外部檔案定義的變數,在使用時去其他模組查詢。也可以理解為宣告了乙個外部的變數。通過結果我們可以分析到:

宣告的其實就是定義的變數本身。

函式指標

首先看一段**:

輸出的兩個位址,這兩個位址是test函式的位址。

那怎麼儲存呢?

再來看一段**:

void test()

void (*pfun1)();

void *pfun2();

int main()

在上述**中,能夠儲存位址的指標是pfun1,pfun1先和* 結合,說明pfun1是指標,指標指向的是乙個函式,指向的函式無引數,返回值型別為void。

函式指標陣列

陣列是乙個存放相同型別資料的儲存空間

在上述論述中,已經了解了指標陣列,比如:

int *arr[10]; //陣列的每個元素是int*

要把函式的位址存到乙個陣列中,這個陣列就叫函式指標陣列

int (*parr1[10])(); parr1 先和[ ]結合,說明parr1 是陣列,陣列的內容是 int (*)()型別的函式指標

用途:轉移表

例子:(計算器)

#include

#include

int add(int a, int b)

int sub(int a, int b)

int mul(int a, int b)

int mydiv(int a, int b)

int main()

printf("ret=%d\n", ret);

}getchar();

return 0;

}使用函式指標陣列實現:

#include

#include

int add(int a, int b)

int sub(int a, int b)

int mul(int a, int b)

int mydiv(int a, int b)

int main()

;//轉移表

while (input)

else

printf("輸入有誤\n");

printf("ret=%d\n", ret);

}getchar();

return 0;

}指向函式指標陣列的指標

指向函式指標陣列的指標是乙個指標

指標指向乙個陣列,陣列的元素都是函式指標;

void test(const char* str)

int main()

指標的指標位址運用

以下 輸出什麼 1 2 3 4 5 6 main int p int a 1 printf d p 1 正確答案 c 1 2 5 出現錯誤 選擇c,a表示乙個指向大小為5陣列的指標,那麼 a 1就是表示乙個指向大小為5的下乙個陣列的指標,也就是陣列a最後乙個元素的下乙個位置,那麼int p int ...

Git運用高階

git建立本地分支 git checkout b x 或git branch x git checkout x git從倉庫轉殖 轉殖專案 git clone git ip 專案.git 轉殖專案並在本地建立開發分支 git clone git ip 專案.git b develop git更新本地...

C 指標運用

前提 計算機裡,記憶體調取變數,需要知道變數的實體地址,相當於現實生活中的地標,當鎖定地標之後,程序從記憶體呼叫變數時才能做到精確無誤。而我們指標就提供了地標值,哲學上通俗的說,在一定時間內地標值精確的代表了一棟房子,我們可以說當我們說起地標值,就相當於說起了房子,當我們說起了房子,也就是地標值。指...