类型转换void指针? [英] Type-casting void pointers?

查看:174
本文介绍了类型转换void指针?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Obrhy / hugo 2004年7月12日


是否有一个很好的理由无效指针

args被转换为byte只是为了将它们的

地址分配给字节指针?


/ *来自Steve Maguire的''编写代码''* /


void * memcpy(void * pvTo,void * pvFrom,size_t size)

{

byte * pbTo =(byte *)pvTo;

byte * pbFrom =(byte *)pvFrom;

while(size--> 0)

* pbTo ++ = * pbFrom ++;


返回(pvTo);

}


地址都是unsigned int。为什么不

只需字节* pbTo = pvTo;初始化?


hugo ---------

Obrhy/hugo July 12, 2004

Take a look at this memcpy() definition.
Is there a good reason the void pointer
args are cast to byte just to assign their
addresses to byte pointers?

/*from Steve Maguire''s ''Writing Soild Code''*/

void *memcpy(void *pvTo,void *pvFrom,size_t size)
{
byte *pbTo = (byte *)pvTo;
byte *pbFrom = (byte *)pvFrom;
while(size-- >0)
*pbTo++ = *pbFrom++;

return (pvTo);
}

The addresses are all unsigned int. Why not
simply byte *pbTo = pvTo; to initialize?

hugo ---------

推荐答案

" hugo2" < OB **** @ yahoo.com>在消息中写道

news:11 ********************* @ z14g2000cwz.googlegro ups.com ...
"hugo2" <ob****@yahoo.com> wrote in message
news:11*********************@z14g2000cwz.googlegro ups.com...
Obrhy / hugo 2004年7月12日

看看这个memcpy()定义。
是否有一个很好的理由将void指针
args强制转换为字节将他们的
地址分配给字节指针?

/ *来自Steve Maguire'''Writing Soild Code''* /

void * memcpy(void * pvTo,void * pvFrom,size_t size)
{
byte * pbTo =(byte *)pvTo;
byte * pbFrom =(byte *)pvFrom;
while(size - > 0)
* pbTo ++ = * pbFrom ++;

返回(pvTo);
}

地址都是unsigned int。为什么不
简单的字节* pbTo = pvTo;初始化?
Obrhy/hugo July 12, 2004

Take a look at this memcpy() definition.
Is there a good reason the void pointer
args are cast to byte just to assign their
addresses to byte pointers?

/*from Steve Maguire''s ''Writing Soild Code''*/

void *memcpy(void *pvTo,void *pvFrom,size_t size)
{
byte *pbTo = (byte *)pvTo;
byte *pbFrom = (byte *)pvFrom;
while(size-- >0)
*pbTo++ = *pbFrom++;

return (pvTo);
}

The addresses are all unsigned int. Why not
simply byte *pbTo = pvTo; to initialize?




IMO没有必要,如果这些无效*。

除非有人的Clib实现打破了,size_t是一个非负的

类型,因此不需要放大小 - > 0,只需要大小就可以了。

我在某处看过ssize_t linux最近,甚至在单一的unix规范中。

愚蠢的东西IMO。它限制了有效范围,允许签名值询问

的问题...


Alex



IMO there''s no need in this if those are void*.
And unless someone''s Clib implementation is broken, size_t is a nonnegative
type, hence no need to put size-->0, simply size would do.
I''ve seen ssize_t somewhere in linux recently, even in the single unix spec.
Stupid thing IMO. It limits the valid range by allowing signed values asking
for problems...

Alex


hugo2写道:
Obrhy / hugo 2004年7月12日

看看这个memcpy()定义。
有没有一个很好的理由,无效指针
args被转换为byte只是为了将它们的
地址分配给字节指针?

/ *来自Steve Maguire'''Writing Soild Code''* /


您是否忘记了''e'或错误的''我'

和'l''的顺序? SCNR

void * memcpy(void * pvTo,void * pvFrom,size_t size)
{
byte * pbTo =(byte *)pvTo;
byte * pbFrom =(byte *)pvFrom;
while(size--> 0)
* pbTo ++ = * pbFrom ++;

返回(pvTo);
}

地址都是unsigned int。为什么不
简单的字节* pbTo = pvTo;初始化?
Obrhy/hugo July 12, 2004

Take a look at this memcpy() definition.
Is there a good reason the void pointer
args are cast to byte just to assign their
addresses to byte pointers?

/*from Steve Maguire''s ''Writing Soild Code''*/
Did you forget an ''e'' or get wrong the order of ''i''
and ''l''? SCNR
void *memcpy(void *pvTo,void *pvFrom,size_t size)
{
byte *pbTo = (byte *)pvTo;
byte *pbFrom = (byte *)pvFrom;
while(size-- >0)
*pbTo++ = *pbFrom++;

return (pvTo);
}

The addresses are all unsigned int. Why not
simply byte *pbTo = pvTo; to initialize?




在void *的情况下,强制转换是完全没必要的。

我不知道类型的定义;字节"但是如果

它不是unsigned char的typedef,我会

建议您看看

clc而不是相信这本书:不必要的演员

是一件坏事。


干杯

迈克尔

-

电子邮件:我的是/ at / gmx / dot / de地址。



In the case of void*, the cast is completely unnecessary.
I do not know the definition of the type "byte" but if
it is anything other than a typedef for "unsigned char", I would
suggest that you have a look at the wisdom to be found in
c.l.c rather than believing this book: Unnecessary casts
are a Bad Thing.

Cheers
Michael
--
E-Mail: Mine is an /at/ gmx /dot/ de address.


hugo2写道:
hugo2 wrote:
Obrhy / hugo 2004年7月12日

看一下这个memcpy()的定义。
这是否有充分理由指针
args被转换为字节只是为了将它们的地址分配给字节指针?

/ *来自Steve Maguire'''Writing Soild Code''* /

void * memcpy(void * pvTo,void * pvFrom,size_t size)
{
byte * pbTo =(byte *)pvTo;
byte * pbFrom =(byte *)pvFrom;
while(size--> 0)
* pbTo ++ = * pbFrom ++;

return(pvTo);
}
< br / >地址都是unsigned int。为什么不
简单的字节* pbTo = pvTo;初始化?
Obrhy/hugo July 12, 2004

Take a look at this memcpy() definition.
Is there a good reason the void pointer
args are cast to byte just to assign their
addresses to byte pointers?

/*from Steve Maguire''s ''Writing Soild Code''*/

void *memcpy(void *pvTo,void *pvFrom,size_t size)
{
byte *pbTo = (byte *)pvTo;
byte *pbFrom = (byte *)pvFrom;
while(size-- >0)
*pbTo++ = *pbFrom++;

return (pvTo);
}

The addresses are all unsigned int. Why not
simply byte *pbTo = pvTo; to initialize?



你是对的,C中不需要强制转换。这将是C ++,所以

可能是这种用法的原因。它类似于来自* alloc()系列的

返回的强制类型转换,不是必需的,但是很多代码

无论如何都要执行它。我对这本书一无所知

你提到的。



Brian


You are correct, the cast is not required in C. It would be in C++, so
that could be reason for that usage. It''s similar to the casts for the
returns from the *alloc() family, not necessary but a LOT of code
examples out there do it anyway. I don''t know anything about that book
you mention.


Brian


这篇关于类型转换void指针?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆