我星期六有期中考試,所以我們的老師給了我們上一年的期中考試來幫助。所以有一個問題我很難理解。問題是'填寫問號,以便程式輸出字串'accioccium'。
對于不想花錢解決的人,答案是 1,2 和 spell2。
那么這里發生了什么?特別是,什么是char* (*a[3]) (char *, char *)
?我的意思是我們正在創建一個 char 指標陣列,但最后的括號是什么?
還有,a[0] = fun1
也很奇怪。是的,您可以按函式分配變數。但是,這里沒有 fun1 函式的引數。假設引數是常數,如 *s 和 *p。但這一次,他們是什么?
#include <stdio.h>
#include <string.h>
char* fun1(char *s, char *p) {
return s strspn(s,p);}
char* fun2(char *s,char *p) {
return strcat(s,p);}
char* fun3(char *s,char *p){
return strstr(s,p);}
char* (*a[3]) (char *,char *);
int main(void) {
int i;
char spell1[10] = "accio";
char spell2[10] = "aparecium";
char* result;
a[0] = fun1;
a[1] = fun2;
a[2] = fun3;
result = (*a[?]) (spell1, "c");
printf("%s",result);
result = (*a[?]) (?, "c");
printf("%s",result);
return 0;}
感謝您的時間和幫助。
uj5u.com熱心網友回復:
特別是,什么是
char* (*a[3]) (char *, char *)
?我的意思是我們正在創建一個 char 指標陣列,但最后的括號是什么?
它是一個由 3 個指向函式的指標組成的陣列,它接受 2 個引數指標char
并回傳一個指向char
.
賦值a[0] = fun1
不需要引數,fun
不執行,只分配給兼容的指標a[0]
,你只需要在以后真正想要執行函式時添加引數,例如在行中完成result = (*a[?]) (spell1, "c");
uj5u.com熱心網友回復:
char* (*a[3]) (char *,char *);
從a
“順時針”或“先在右邊撿東西”開始:
a
[
是陣列3])
3 個(*
指標(...)
最后,發揮作用char *,char *
取兩個型別引數char*
char*
在開始時,回傳型別的值char*
這匹配fun1
, fun2
snd的簽名fun3
。實際上,陣列中充滿了指向這 3 個函式的指標。沒有函式名()
的意思是指向函式的指標,它不呼叫函式,&
也不需要使用來獲取地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467399.html
下一篇:如何為二維陣列之一賦值?