高手进:c 函数中 关于 0 地址问题
时间:2010-07-22
来源:互联网
如果我建立一个函数
typedef struct Name{
int len;
char value[10]
} name;
void sayhello()
{
name a = 0;
}
请问这么写 (unsigned long)(&((name*)0)->value) 啥意思 ? 希望我描述清楚了。
多谢
作者: xuan_oscar 发布时间: 2010-07-22

作者: xuan_oscar 发布时间: 2010-07-22
=====
这样写能编译通过么。。。
(unsigned long)(&((name*)0)->value)
=====
这个&是干嘛的,这里value本来就是地址了啊,int 32位的话,那 ->value 就是4了。怎么还要用&取地址啊。
作者: pandaiam 发布时间: 2010-07-22
当运算符计算到->的时候,在大部分系统下悲剧的非法访问了。
如果某些系统可以用的话,
_________________________________________________________
以上发言为错误认识,我想当然了,sorry!!!
表达式的值为4.
对数组名也可以取地址,得到的数值和直接使用数组名是一样的,但是类型不一样。
作者: davelv 发布时间: 2010-07-22
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
作者: efolzl 发布时间: 2010-07-22
作者: zliming 发布时间: 2010-07-22
如果某些系统可以用的话,表达式的值为4.
对 ...
davelv 发表于 2010-07-22 17:52
->这个是编译器计算,运行时直接是 p + [4];没有运算
作者: zliming 发布时间: 2010-07-22
这里MEMBER如果不是数组名的话加上&还好,
但是是数组名的话加上&还对么。。
作者: pandaiam 发布时间: 2010-07-22
zliming 发表于 2010-07-22 17:57
刚才写个程序测试下,自己想当然了,谢谢提醒。
作者: davelv 发布时间: 2010-07-22
作者: zliming 发布时间: 2010-07-22
作者: xuan_oscar 发布时间: 2010-07-22
对数组名取地址仍然指向该数组
作者: 俺小时候可帅了 发布时间: 2010-07-22
作者: xuan_oscar 发布时间: 2010-07-22
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28