我是丹麥的一位本地程序員,試圖幫助一位朋友與他的C exsam。如何閱讀此C代碼? exsam準備
他需要學習閱讀某些代碼設計,比如這個。不過,我不能在這裏的結果來自...有人請幫助我理解它的頭部或尾部,所以我可以幫助他:
#include <stdio.h>
#include <stdlib.h>
int func1(int);
void func2(int(*fp)(int), int);
void main(){
int (*fp)(int);
fp = func1;
(*fp)(1);
func2(fp,(*fp)(2));
}
int func1(int arg){
printf("Func1 %d\n", arg);
return arg;
}
void func2(int(*fp)(int), int arg){
printf("Func2 %d\n",arg+fp(arg));
}
我知道雁是: FUNC1 1 FUNC1 2 Func1 2 Func2 4
但是,爲什麼這樣!高於我的薪酬水平。
據我所知,在void main()
我們diffine int ...但是這看起來很奇怪。
我們然後調用fp = func1;
,有效地運行printf("Func1 %d\n", arg);
文本應「FUNC 1(插入ARG這裏)。我不明白爲什麼這給了一些1.
它,然後做一些事情在這裏(*fp)(1);
meaby樣的一些指針的東西???
我不明白爲什麼它運行在連續3次printf("Func1 %d\n", arg);
並再次,哪裏的數字從何而來?
和代碼的其餘部分是沒有更好的
再看一遍:'printf(「Func1%d \ n」,arg)'。它打印什麼? –
int(* fp)(int)'是一個指向一個函數的指針,該函數接受一個int並返回一個int,因此函數簽名將爲int some_name(int)。在第二行「fp = func1」中,我們將'func1'的地址賦給'fp'(注意func1的簽名是'int func1(int)',與上面的聲明匹配。用參數1調用func1的效果。我建議你們都刷新函數指針和它們的用法:)。 – thurizas