指標與陣列,指標與函式之間的關係
阿新 • • 發佈:2018-12-31
指標陣列和陣列指標
指標陣列,它的關鍵在於是一個數組,即陣列中每個元素都是指標。
陣列指標,他的關鍵在於是指標變數,即這個指標指向一個數組。
#include<stdio.h>
int main ()
{
int arr [4] = {0};//這是一個數組,大家都知道。
int *parr1[4];//這是指標陣列,首先[]的優先順序比*的優先順序高,所以parr
//先與[]結合,它是一個數組,然後再與*結合,即陣列中的
//每個元素都是指標。
int (*parr2)[4];//這是陣列指標,因為()的優先順序比[]的高
//所以parr是一個指標變數,然後與[]結合
//所以,這是陣列指標。
int *(*parr3)[4];//較為複雜一點的陣列指標,首先parr3是一個指標變數,
//然後與[]結合,變為陣列指標,而前面又有*,所以它可以指
//向一個大小為3個元素的陣列,每個元素是指標。
}
函式指標
函式指標就是函式的指標,他是一個指標,指向一個函式。
#include <stdio.h>
#include <string.h>
char* fun (char *p1,char *p2)
{
int tmp = 0;
tmp = strcmp(p1,p2);
if (tmp==0)
{
return p1;
}
else
{
return p2;
}
}
int main ()
{
char *(*pfun)(char *p1,char *p2);
pfun = &fun;
(*pfun)("aa","bb");
return 0;}//這個例子就很好的解釋了函式指標這個定義。我們清楚表示式
//"char*(*pfun)(char*p)"定義的是一個函式指標pfun。
//首先通過(*pfun)取出存在這個地址上的函式,然後呼叫。
函式指標的陣列
函式指標的陣列,它是一個數組,陣列中的每個元素是一個函式指標,這個指標可以指向一個函式。
#include <stdio.h>
#include <string.h>
char *fun1(char*p)
{
printf ("%s\n",p);
return p;
}
char *fun2 (char *p)
{
printf ("%s\n",p);
return p;
}
char *fun3 (char*p)
{
printf ("%s\n",p);
return p;
}
int main ()
{
char *(*pfun[4])(char *p)//這裡的表示式表示的就是函式指標的陣列
pfun[1] = fun1;//可以直接用函式名錶示地址
pfun[2] = &fun2;//也可以在函式名前加取地址符號。
pfun[3] = &fun3;
}
函式指標陣列的指標
它指的還是一個指標,只不過這個指標指向一個數組,這個數組裡的元素是可以指向函式的指標,有點繞。
void (*(*pfun)[3])(char *)//首先pfun是一個指標變數,然後指向一個數組,這個
//陣列有三個元素,這幾個元素可以指向函式的指標,函式
//的引數是char *,返回值為 void