1樓:匿名使用者
1.函式指標的陣列定義方法:返回值型別( * 指標變數名[number]) (形參列表)。
例如:double add(double a,double b){};
double sub(double a,double b){};
double mul(double a,double b){};
double div1(double a,double b){};
double (*oper_func)(double, double) = ;//函式指標的陣列定義
2.函式指標是指向函式的指標變數。 因而「函式指標」本身首先應是指標變數,只不過該指標變數指向函式。
這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。c在編譯時,每一個函式都有一個入口地址,該入口地址就是函式指標所指向的地址。有了指向函式的指標變數後,可用該指標變數呼叫函式,就如同用指標變數可引用其他型別變數一樣,在這些概念上是大體一致的。
函式指標有兩個用途:呼叫函式和做函式的引數。
3.函式指標的宣告方法為:
返回值型別( * 指標變數名) (形參列表);
「返回值型別」說明函式的返回型別,「( * 指標變數名)」中的括號不能省,括號改變了運算子的優先順序。若省略整體則成為一個函式說明,說明了一個返回的資料型別是指標的函式,後面的「形參列表」表示指標變數指向的函式所帶的引數列表。例如:
int func(int x); /* 宣告一個函式 */
int (*f) (int x); /* 宣告一個函式指標 */
f = func; /* 將func函式的首地址賦給指標f */
或者使用下面的方法將函式地址賦給函式指標:
f = &func;
賦值時函式func不帶括號,也不帶引數,由於func代表函式的首地址,因此經過賦值以後,指標f就指向函式func(x)的**的首地址。
例子:#include
int max(int x,int y)
int main()
2樓:
#include
#include
void paixu(char **a) }} }
void main()
; int i;
printf("輸出地址\n\n");
for(i=0;i<5;i++)
paixu(a);
printf("最終排序是\n\n");
for(i=0;i<5;i++) }
main函式中a是常指標,它指向一組陣列,這組陣列每個元素又是指向字串的指標,所以陣列中每個元素的型別是char* , 因此變數a的型別是(char*)*,即char**.排序沒有必要返回char吧(完成排序功能還用返回一個字元麼?),函式引數改為char**型別,這樣才能將指標陣列首地址傳入函式.
向函式裡傳入的是陣列指標,我更改的是陣列元素,這是明顯的按地址傳遞方式傳遞引數,還用再return麼.
3樓:匿名使用者
指標陣列 就是有一個陣列,陣列中的元素都是指標,這些指標有相同的型別int *a[3];
char *b[4];
double *c[5];
char paixu(char *a[5]) //這樣才是字串陣列 }} }
c語言指標陣列如何存放函式地址C語言指標陣列如何存放函式地址
c c 的指標的靈活,常把許多初學者搞暈,連高手也是如此。1.當然,可以呀,一切資料都可返回 2.複合指標型別直接表示非常麻煩 連高手都是這樣 可以分解成多個簡單型別 typedef void funtype void funtype num 100 分解後簡單多了!3.因為函式名不是字串,初始化時...
C語言子函式呼叫糾錯,C語言子函式呼叫糾錯
第一 要保證可以最終退出。就是說,這樣的呼叫最終可以回來。第二 避免迴圈呼叫。就是說當a呼叫b,然後b又呼叫a這種情況,一定要有可以跳出的情況,讓某個a或者b在一定條件下不再呼叫對方就可以返回。第三 避免呼叫深度過深。就是說不能一直呼叫下去。這個具體能夠呼叫多少次根據你的硬體 等具體情況確定的。一般...
C 函式呼叫二維陣列,C語言一維陣列轉二維陣列
n如果是變數的話,陣列編譯時都通不過吧。陣列分配時必須知道大小。函式應該這樣宣告function char array 10 10 或省略第一維的大小function char array 10 function char array n n 這樣是錯誤的,陣列的索引必須是個常量表示式。如果需要必須...