如果类型匹配左侧操作数,为什么明确表示右侧指针操作数?

时间:2013-01-22 17:09:54

标签: c pointers casting variable-assignment

关于C编程,我在示例代码中看到了几种情况,其中指针赋值涉及右侧操作数的显式转换,即使它已经与左侧操作数的类型匹配。只举一个例子:

void memcpy(u8int *dest, const u8int *src, u32int len)
{
    const u8int *sp = (const u8int *)src;
    u8int *dp = (u8int *)dest;
    for(; len != 0; len--) *dp++ = *sp++;
}

当然,该函数也在头文件中正确声明为:

void memcpy(u8int * dest, const u8int * src, u32int len);

该函数已经将变量“src”定义为类型“const u8int *”,那么为什么在分配给“sp”时也会给出一个显式的强制转换,它也是“const u8int *”类型的?将“dest”分配给“dp”也是如此。

4 个答案:

答案 0 :(得分:4)

如果你正在寻找一个神奇的神秘理由,你会感到失望。这种类型的显式类型转换没有意义。

这是程序员的一种风格决定(和IMO一样糟糕)。类型转换具有潜在的危险(通过“屏蔽”重要警告)并使代码更复杂以便阅读......它应该保留用于需要它的情况。这不是其中之一。

答案 1 :(得分:1)

当它们属于同一类型时,不要使用它。这是一个不好的做法。

也许你读错了书。

答案 2 :(得分:1)

我的猜测是它只是查找/替换操作的遗留物,没有理由这样做。

答案 3 :(得分:0)

他可能只是因为他虔诚地编写代码而没有任何意义(习惯)。

只有编写此代码的程序员知道他在做什么(或者他没有)。此函数可能会覆盖memcpy()中的string.h,因为您不能拥有两个相同名称的函数。知道了,他正处于危险的水域。你也必须使用它。