* (u32 *)addr = 0;什么意思?

insane
* (u32 *)addr = 0;什么意思?

[code]
typedef unsigned int u32;
u32 addr;
for(addr = START;addr < END;addr += SIZE)
    * (u32 *)addr = 0;
[/code]

不明白最后一句什么意思,请高手详解!!!

PS:之前少写了for语句.

[[i] 本帖最后由 insane 于 2008-6-29 18:26 编辑 [/i]]

tigerz
addr地址指向的u32置为0

insane
[quote]原帖由 [i]tigerz[/i] 于 2008-6-29 17:52 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8697402&ptid=1183855][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
addr地址指向的u32置为0 [/quote]

看不懂你说的.
u32 是一个数据类型,怎么会置为0呢?
而变量 addr 不是被定义成 u32 类型的吗,
取其地址应该是 &addr 吧?

我是这样想的,
变量 addr 被定义成 u32 类型,
(u32 *)addr 是强制类型转换,把它变成指针变量,
然后*addr指向START?

[[i] 本帖最后由 insane 于 2008-6-29 18:27 编辑 [/i]]

cugb_cat
addr是个指针~

flagcugb
先是将addr强行转换为u32 类型的指针,再将该指针所指向的单元赋值为0。

77h2_eleven
能这么转么?编译器没报错?

err7dd
5楼正解,看起来是一段初始化程序

xxyqiufeng
初始化
这个我可能倾向于用memcpy,呵呵~~
高手讲一下memcpy可能带来的不好的后果,期待中...

lllaaa
[quote]原帖由 [i]xxyqiufeng[/i] 于 2008-6-29 21:38 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8698602&ptid=1183855][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
初始化
这个我可能倾向于用memcpy,呵呵~~
高手讲一下memcpy可能带来的不好的后果,期待中... [/quote]


初始化成全0一般用memset

用memcpy你还得准备一份初始化好的。

tyc611
[quote]原帖由 [i]tigerz[/i] 于 2008-6-29 17:52 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8697402&ptid=1183855][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
addr地址指向的u32置为0 [/quote]
同意
需要注意循环中SIZE可能比sizeof(u32)大,所以没用memset

insane
[quote]原帖由 [i]err7dd[/i] 于 2008-6-29 21:28 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8698558&ptid=1183855][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
5楼正解,看起来是一段初始化程序 [/quote]

确实是一段初始化的程序.

insane
[quote]原帖由 [i]tyc611[/i] 于 2008-6-29 23:23 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8699155&ptid=1183855][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

同意
需要注意循环中SIZE可能比sizeof(u32)大,所以没用memset [/quote]

可能是我没理解2楼那句话的意思.

jiangf
* (u32 *)addr = 0;
多此一举,为什么要先吧addr转化成指针,然后在赋值.

Godbach
[quote]原帖由 [i]jiangf[/i] 于 2008-6-30 10:32 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8700890&ptid=1183855][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
* (u32 *)addr = 0;
多此一举,为什么要先吧addr转化成指针,然后在赋值. [/quote]

如果不先强制转换为u32 *, 你怎么保证这个0时赋给char,还是 unsigned int的。:em17:

tigerz
回复 #12 insane 的帖子

分解来看:
* (u32 *)addr = 0;

(u32 *)addr: 把 addr 由u32型转化为一个 (u32 *) 型。-> u32 * tmp = (u32 *)addr;
*tmp = 0; tmp 是类型是 u32*, 所以是对tmp指向的一个u32赋为0。针的类型决定了这个赋值运算作用的地址长度。

想一想 *(char *)addr = 0; *(short *)addr = 0; 跟 *(u32 *)addr = 0 结果不一样。

insane
[quote]原帖由 [i]tigerz[/i] 于 2008-6-30 12:07 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8701724&ptid=1183855][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
分解来看:
* (u32 *)addr = 0;

(u32 *)addr: 把 addr 由u32型转化为一个 (u32 *) 型。-> u32 * tmp = (u32 *)addr;
*tmp = 0; tmp 是类型是 u32*, 所以是对tmp指向的一个u32赋为0。针的类型决定了这个赋值 ... [/quote]

谢谢解答...