我的开发环境包含用于ARM OMAP Sitata的g ++交叉编译器.当向unsigned int*添加unsigned int时,我发现了一个简单的指针算法的不寻常的细微差别,如下所示:
unsigned int* dst_base_addr;
unsigned int* dst_addr;
unsigned int dst_offset;
Run Code Online (Sandbox Code Playgroud)
只是尝试将(unsigned int)添加到(unsigned int*)
dst_addr = dst_base_addr + dst_offset;
Run Code Online (Sandbox Code Playgroud)
上述内容并未被解释为人们可能会天真地想到,但实际上会产生以下等效结果
dst_addr = (unsigned int*)((unsigned int)dst_base_addr + (dst_offset << 2));
Run Code Online (Sandbox Code Playgroud)
补救当然是按照以下方式进行适当的类型转换
dst_addr = (unsigned int*)((unsigned int)dst_base_addr + dst_offset);
Run Code Online (Sandbox Code Playgroud)
问题:为什么在这种情况下甚至需要正确的类型转换?