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」をタイプ「constu8int*」として定義していますが、タイプ「const u8int *」でもある「sp」に割り当てられたときに明示的なキャストが与えられるのはなぜですか?「dest」から「dp」への割り当てについても同じことが言えます。