我正在使用VS 2013和c。
处理现有项目我来到这个功能,但我不明白这意味着什么:
int (*Read)(void *p, void *buf, size_t *size);
我所知道的是它是一个返回int指针的函数,但我想知道:
- 为什么void as type意味着在处理参数时(可能是通用指针?)
- 在这种情况下,(* Read)意味着什么(我认为它是演员!)
醇>
要真正了解我在这里使用的是完整的依赖项:
typedef struct
{
#ifdef USE_WINDOWS_FILE
HANDLE handle;
#else
FILE *file;
#endif
} CSzFile;
typedef struct
{
int (*Read)(void *p, void *buf, size_t *size);
} ISeqInStream;
typedef struct
{
ISeqInStream s;
CSzFile file;
} CFileSeqInStream;
CFileSeqInStream inStream;
最后的目标是打开一个文件,但为什么所有这些并发症!
任何帮助将不胜感激,谢谢。
答案 0 :(得分:5)
我所知道的是它是一个返回指向int
的指针的函数
不,它是指向函数的指针,它将以下参数类型作为输入:
void*
void*
size_t*
并返回int
值作为输出。
答案 1 :(得分:2)
它不是演员,它是声明,并声明Read
是指向函数的指针,该函数接受一些参数并返回{{1} }。
至于第一个问题,如果你的意思是int
,就像void
那样,那么这是一个通用指针,这意味着你可以将任何类型的指针作为参数传递。
答案 2 :(得分:2)
这是一个函数指针,它将指向一个函数,该函数将接受参数(void *p, void *buf, size_t *size)
并将值返回为int
。
这不是演员。
答案 3 :(得分:2)
它是一个名为read的函数指针的定义,它返回一个int。
参数是void类型的指针p,指针buff也关闭类型void和int,可能是buff参数的大小。
我没有doc,但我猜它是从p读取并将结果返回缓冲区。 size参数也是避免缓冲区溢出,返回值是读取的项目数。
您可以使用变量Read作为函数来使用该函数:Read(),即使它实际上是指向函数的指针(至少如果前者已被模仿)。