虽然是一个java程序员。但是c的东西不能丢啊,很多底层的东西都是c的。
好记性不好烂笔头,基础知识需要一点一点的积累。
都知道c中区别与其他语言的就是指针,初学者常常被指针搞得痛不欲生。
变量的指针即是变量在内存中的地址。同样,函数的指针指的也就是函数在内存中的地址。
经常见到的是在结构体中使用函数指针:
#include <stdio.h>
#include <string.h>
void * write(char * p1)
{
printf("%s", p1);
}
struct Tool
{
void (*write)(char * p1);
};
int main()
{
struct Tool tool;
tool.write=(void*)&write;
tool.write("hello world!\n");
return 0;
}
而且发现,函数指针仅仅就是一个指针,并不会对参数的个数,类型等做校验。
#include <stdio.h>
#include <string.h>
void * write(char * p1, char * p2)
{
printf("%s", p1);
}
struct Tool
{
void (*write)(char * p1);
};
int main()
{
struct Tool tool;
tool.write=(void*)&write;
tool.write("hello world!\n");
return 0;
}
以上代码会正确的输出"hello world!"。
#include <stdio.h>
#include <string.h>
void * write(char * p1)
{
printf("%s", p1);
}
struct Tool
{
void (*write)(char * p1, char * p2);
};
int main()
{
struct Tool tool;
tool.write=(void*)&write;
tool.write("hello world!\n", "10");
return 0;
}
以上代码也不会报错,只是只能输出第一个参数,第二参数无法输出。
由于不理解底层实现,只能对现象做一个总结。