C語言指標(函式指標陣列,二級指標)

2021-08-20 10:40:42 字數 2196 閱讀 4422

int (*p[num])( char*,int,int );

int (*(*p)[num])(int a);

函式指標陣列指標和前面的陣列指標其實沒有太大區別。然後今天主要理一下函式指標陣列和二級指標。

函式指標陣列中,存放的一定要是相同返回值型別,以及相同引數列表的函式指標,這樣陣列可以通過下標來呼叫不同的函式,省去了使用大量的判斷語句。下面舉個例子:

假設你要看電影,下面有4種型別的,動作,浪漫,**,搞笑,然後再輸入電影名**。按照以前我可能就會是一堆if else或者switch case來判斷 ,但現在可以這樣:

#includevoid watch_action(char* name)

void watch_funny(char* name)

void watch_romantic(char* name)

void watch_cartoon(char* name)

int main(int argc, char const *argv)

; printf("what kinds of movie would you want\n");

int num;

scanf("%d",&num);

printf("please input the movie name of this kinds\n");

char movie_name[128];

scanf("%s",movie_name);

watch[num](movie_name);

return 0;

}

通過num來呼叫不同的函式,省去了一堆判斷語句,感覺還是方便蠻多的。

在指標的定義時就說過,指標變數雖然儲存的是別人的位址,但其本身也是有位址的。而指向指標位址的指標,就叫做二級指標。

那啥時候會用到二級指標?不急,先看下面**:

#include int change_1(int b)

int change_2(int *p)

int main(int argc, char const *argv)

你覺得輸出是多少 ?  編譯後結果是 5和15 也就是說change_1()這個函式沒有把a修改了。c語言中函式的傳參是值傳遞,change_1()只不過是把實參a的值5傳給了區域性變數b,然後b在被賦值10並返回,函式結束, b的生命週期也結束了。而主函式中的a根本就沒有發生變化。要修改a的值,就要用第二種方法,前面我們說了,指標指向的是位址, change_2()中p得到的是a所在的位址,而*p就代表這個位址中的內容,我們對*p進行修改,就代表我們對這個位址上的變數即 a進行了修改。

所以,想要修改乙個資料的值,就要找到他的位址,用一級指標來修改。以此類推, 想要修改指標的值,我們就要找到指標的位址,用二級指標來對他進行修改。

下面可以看下這個**的結果,可能會更清晰一點:

畫個圖:

可以很清楚的看到  a的位址被放入了一級指標p當中 p的位址被放入了二級指標pp當中  

p == &a 說明 *p == a       pp == &p 說明*pp == p     *pp == &a 說明 **pp == a  

也就是 **pp == *p == a  

最後舉個具體用例吧。

#include int main(int argc, char const *argv)

; char** p;

p = &num[0];

int number;

scanf("%d",&number);

printf("english number is %s\n",*(p+number-1));

return 0;

}

定義乙個指標陣列num,輸入阿拉伯數字轉換成英文數字。這裡如果單單只有一級指標是不夠的,一級指標只能找到字串所在的位置,但是找不到其首位址,導致無法輸出。所以需要二級指標二級定址來輸出。

C 陣列指標 指標陣列與二級指標

二級指標 測試 陣列指標是指標,意為指向陣列的指標 指標陣列是陣列,意為陣列內部儲存著指標的陣列。陣列指標具有如下特性1 陣列指標用於指向乙個陣列 陣列名是陣列首元素的起始位址,但不是陣列的起始位址,通過取位址符 作用域陣列名可以得到陣列的起始位址 可以通過陣列型別定義陣列指標如 arraytype...

一級指標 二級指標 指標和陣列 指標陣列

一級指標 int p 上述 定義了乙個一級指標變數,int為基型別。指標變數的基型別用來指定此指標變數可以指向的變數的型別。一級指標變數也就是儲存著另外乙個變數位址的變數 在定義指標時應注意指標變數必須指定基型別。且必須給指標變數賦初值,在不確定該指標變數要指向什麼的時候應該給其賦null,否則該指...

一級指標 二級指標 指標和陣列 指標陣列

一級指標存放的是變數的位址 一級指標名就可以等於這個位址 二級指標存放的是一級指標的位址,同樣指標名就是這個位址 陣列指標是乙個指標 它所存放的位址是陣列變數的位址,即指向不同陣列 所以說一級指標 二級指標 陣列指標都是指標,只是型別不同 而指標陣列,是乙個陣列,他存放的資料型別是指標型別 p是指標...