* (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]]
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]]
flagcugb
先是将addr强行转换为u32 类型的指针,再将该指针所指向的单元赋值为0。
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]
谢谢解答...