纯C语言C99:↓
#include <stdio.h>
int add(int a, int b){
return a+b;
}
int main(){
int(*p)(int, int) = add;
printf("1+1=%d\n", p(1, 1));
int(*q)(int, int) = &add;
printf("1+1=%d\n", q(1, 1));
return 0;
}
运行结果(没有任何警告):↓
1+1=2
1+1=2
如果说函数名的本质就是个指针,那么q指针为什么就可以指向指针地址呢?
int(*q)(int, int) = &add; //√ 成功运行
int(**q)(int, int) = &add; //× 编译报错
int(**q)(int, int) = add; //× 编译报错
震惊我一天:↓
#include <stdio.h>
int add(int a, int b){
return a+b;
}
int main(){
int(*p)(int, int) = add;
printf("1+1=%d\n", (*p)(1, 1));
printf("1+1=%d\n", (********************************p)(1, 1));
return 0;
}
这Tm还能完美运行??↑