libcurl如何处理C中curl\u easy\u setopt(handle,CURLOPT\u WRITEFUNCTION,function)上的第三个参数

libcurl如何处理C中curl\u easy\u setopt(handle,CURLOPT\u WRITEFUNCTION,function)上的第三个参数,c,curl,libcurl,C,Curl,Libcurl,我正在做一个从api获取数据的简单程序,并按照文档创建一个回调函数以传递给curl_easy_setopt: size_t callback_libcurl(void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size

我正在做一个从api获取数据的简单程序,并按照文档创建一个回调函数以传递给curl_easy_setopt:

size_t callback_libcurl(void *contents, size_t size, size_t nmemb, void *userp) {                                                                                   
        size_t realsize = size * nmemb;                                                                                                                                   
        struct resultado *mem = (struct resultado *)userp;                                                                                                                
                                                                                                                                                                      
        char *ptr = realloc(mem->dados, mem->tamanho + realsize + 1);                                                                                                     
        if(ptr == NULL) {                                                                                                                                                                                                                                                                                           
              printf("not enough memory (realloc returned NULL)\n");                                                                                                          
              return 0;                                                                                                                                                       
}
然后将其传递给:

curl\u easy\u setopt(处理程序\u curl、CURLOPT\u WRITEFUNCTION、回调\u libcurl)

一切正常,但我不知道为什么。我是如何像那样将回调函数传递给curl函数的?
文档中说参数可以是长的、函数指针、对象指针或旋度。 这一点也不奇怪。
我能找到的唯一来源是:

CURL\u EXTERN CURLcode CURL\u easy\u setopt(CURL*CURL,curlpoption,…)

打开/curl/easy.h但这也没用,我不知道是什么。。。是在上面找不到任何内容。
我错过了什么

文档中说参数可以是长的、函数指针、对象指针或旋度。这一点也不奇怪

在C语言中,函数在适当的时候会自动衰减为函数指针。因此,以下是等效的:

curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, callback_libcurl);
curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, &callback_libcurl);
因此,您正在传递一个函数指针,一个指向
callback\u libcurl

的指针找到了另一个答案:“……在确定每个参数的类型后,任何类型为“T数组”或“函数返回T”的参数都将分别调整为“指向T的指针”或“指向函数返回T的指针…”从C++(?)标准出发。我想这就解决了,非常感谢你。