我星期六有期中考試,所以我們的老師給了我們上一年的期中考試來幫助。所以有一個問題我很難理解。問題是'填寫問號,以便程式輸出字串'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, fun2snd的簽名fun3。實際上,陣列中充滿了指向這 3 個函式的指標。沒有函式名()的意思是指向函式的指標,它不呼叫函式,&也不需要使用來獲取地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467399.html
下一篇:如何為二維陣列之一賦值?
