内核中的函数指针
时间:2004-11-18
来源:互联网
我记得在标准C中,数组名和函数名都代表相应的入口地址。但是在linux内核中有这么一段代码我不明白。
asmlinkage void divide_error(void);
。。。
set_trap_gate(0,÷_error);
既然函数名 divide_error 就代表了函数的入口地址,那么在
set_trap_gate(...)的参数中为什么还要用
÷_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 到底是什么关系,是不是完全相同呢?
asmlinkage void divide_error(void);
。。。
set_trap_gate(0,÷_error);
既然函数名 divide_error 就代表了函数的入口地址,那么在
set_trap_gate(...)的参数中为什么还要用
÷_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 到底是什么关系,是不是完全相同呢?
作者: cxh_nuaa_2001 发布时间: 2004-11-18
对于数组名也一样,如
int arr[10];
则
arr 和 &arr的结果也一样的。
int arr[10];
则
arr 和 &arr的结果也一样的。
作者: cxh_nuaa_2001 发布时间: 2004-11-18
C 中的函数名和数组名都是常量,用上& 和不用本来就是一样的,这只取决于个人习惯问题,
个人习惯还包括代码对齐等,在[Documentation/CodingStyle] 中规定了很多,但却没规定这个问题, :-)
个人习惯还包括代码对齐等,在[Documentation/CodingStyle] 中规定了很多,但却没规定这个问题, :-)
作者: crquan 发布时间: 2004-11-18
这里的max和&max是等价的
作者: seablue 发布时间: 2004-11-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28