|  | 
 
| 我记得在标准C中,数组名和函数名都代表相应的入口地址。但是在linux内核中有这么一段代码我不明白。 
 asmlinkage void divide_error(void);
 。。。
 set_trap_gate(0,&divide_error);
 
 既然函数名 divide_error 就代表了函数的入口地址,那么在
 
 set_trap_gate(...)的参数中为什么还要用
 
 &divide_error 呢? 在这里直接用 divide_error 不可以吗?
 
 请高手指明!
 
 ps:
 我做了一个实验:
 
 #include <stdio.h>
 
 void max(void)
 {
 printf("ok\n");
 }
 
 void main(void)
 {
 void (*p)(void);
 p = max;
 (*p)();
 p = &max;
 (*p)();
 printf("%p, %p\n", max, &max);
 }
 
 结果编译正常通过,得到结果如下(不同的机子可能不同):
 
 ok
 ok
 01FA, 01FA
 
 为什么会出现这种情况呢?
 max 和 &max 到底是什么关系,是不是完全相同呢?
 | 
 |