以下のコードでは、file.rec
をmain
に入れてchar buf
に入れています。次に、buf
と、getCallBack()
関数の関数ポインタを渡しますが、2つの方法で関数を渡します。この関数は、この2つの方法で関数ポインタを正常に受け取ります。だから私はそれを使用するかどうかの違いは何かを知ることに興味があります。関数ポインタで "&"演算子を使用する場合
#include<stdio.h>
void getCallBack(char buf[], void(*executeCallBack)(char[])){
printf("callback recived\n");
executeCallBack(buf);
}
void callBack(char buf[]){
printf("executing callback...\n");
printf("buf content: ");
printf("%s\n", buf);
}
void main() {
FILE *ReadingXmlFile = fopen("texto.rec", "r");
char buf[10000];
fread(buf, 1, 10000, ReadingXmlFile);
fclose(ReadingXmlFile);
printf("passing \"&callBack\"\n");
getCallBack(buf, &callBack);
printf("passing \"callBack\"\n");
getCallBack(buf, callBack);
//
}
関数は、配列が最初の要素へのポインタにどのように崩壊するのと同様に、自然に自身のポインタに減衰します。私はそれについて明示的にすることを推奨し、常にアドレス演算子 '&'を使用します。 –