一个c赋值语句,看看值为多少?

qsyang 2003-09-03 05:22:06

ulong a=10;
*((ulong *) a)-- = 0;
请问a值为多少啊? 关键是为什么????
...全文
109 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
qsyang 2003-09-29
  • 打赏
  • 举报
回复
Meyer 和 babiq 说的很有道理,非常感谢,佩服!
结贴了!
jys0793 2003-09-28
  • 打赏
  • 举报
回复
谁写程序时,写出这种语句,佩服
babiq 2003-09-28
  • 打赏
  • 举报
回复
给大家解释解释吧;

首先这个问题绝对不是竞赛问题,在协议开发中常常用到这样的赋值。

这是一种非常常用赋值方法,如果一个c程序员连这种句子都写不出的话,他肯定会被辞退。

举个例子:

int a[10];

void operate()
{
int* ptr;
ptr = a;

for(int i = 0; i < 10; i++)
{
*ptr++ = i; //pt就等同于楼主提到的*((ulong *) a)-- = 0;中的 (uLong*)a
}
}
此操作包含的意思是先赋值在自加;因此楼主提到的a值是6;
作者这样写程序不过是简化了一下而已。
jock_521 2003-09-28
  • 打赏
  • 举报
回复
哈哈!这样的问题只能在竞赛中出现啊!
Bandry 2003-09-28
  • 打赏
  • 举报
回复
这样程序不会死吗?
Meyer 2003-09-28
  • 打赏
  • 举报
回复
结果为6是很好理解的
*((ulong *) a)-- = 0;

那个= 是给 *a 即 地址为10的内存赋值 0
然后执行 -- 操作 对 a中的数值-1,
因为(ulong *)a 的原因 a是作为 ulong* 的指针
他的机器 ulong 为4字节,所以这个 ((ulong*)a)--
减的是4 所以a=10-4=6

这个应该是c代码,iso C++中是拒绝这种操作的。
Meyer 2003-09-27
  • 打赏
  • 举报
回复
*((ulong *) a)-- = 0;

既然是驱动,
很有可能他是确知 地址 10 部分的数据是他要修改的
Wolf0403 2003-09-27
  • 打赏
  • 举报
回复
ulong* tmp = (ulong*) a;
*tmp = 0;
tmp--;
TianGuangZao 2003-09-27
  • 打赏
  • 举报
回复
同意 Meyer()
需要结合上下文来理解才能判断作者是否在瞎炫耀技术。
代码并不复杂,也很容易理解,不要动不动就贬低人家。
qsyang 2003-09-26
  • 打赏
  • 举报
回复
qhgary(Shining) :
"没有人会写这样的代码"
这就是我们和会写这样代码的差距!!!!!

“如果你写了就准备被炒吧”
这样老板的公司早晚要倒闭!!!!

"因为没有人看得懂"
这倒是事实,不过更明白些应该是“因为这里没有人看的懂”!!!!




qhgary 2003-09-08
  • 打赏
  • 举报
回复
*门根本不会来回答这样的问题,因为上面已经说得很清楚了,没有人会写这样的代码,如果你写了就准备被炒吧,也没有人会去看,因为没有人看得懂
qsyang 2003-09-08
  • 打赏
  • 举报
回复
专家都哪里去了?哪些*们呢?
atlcat 2003-09-04
  • 打赏
  • 举报
回复
无法运行,楼主的程序不对
不过从字面上理解应该是这样的:
*((ulong *) a)-- = 0;
a的地址--=0
而a应该还是10,没变
binjuny 2003-09-04
  • 打赏
  • 举报
回复
又长又臭
whyuuk 2003-09-04
  • 打赏
  • 举报
回复
a 值应该不变!
但是这个语句执行起来是要出错的!
qsyang 2003-09-04
  • 打赏
  • 举报
回复
各位老大,它的输出值是6 !
这不是什么考试题,而是外国人写的某个driver中的一段程序。我也移植比较困惑这样的用法!
robertnet 2003-09-04
  • 打赏
  • 举报
回复
非法地址访问,若真要问a是多少那就当它是10好了。
likangnian0128 2003-09-04
  • 打赏
  • 举报
回复
*((ulong *) a)-- = 0;

??

(ulong *)a 将ulong的a cast成一个ulong的指针,这恐怕是会内存访问出错吧?

然后,假设地址为000000000A的内存可以访问
那么*((ulong *)a)-- 是将地址000000000A的ulong类型的数自减1,结果是一个右值,不能出现在赋值符号左侧,又是一个错误。
liao2001 2003-09-04
  • 打赏
  • 举报
回复
非法地址访问
hillyee 2003-09-04
  • 打赏
  • 举报
回复
haha you are right!
加载更多回复(7)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧