小编usy*_*inc的帖子

将unsigned int添加到unsigned int*

我的开发环境包含用于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)

问题:为什么在这种情况下甚至需要正确的类型转换?

c c++ pointer-arithmetic unsigned-integer

-2
推荐指数
1
解决办法
333
查看次数

标签 统计

c ×1

c++ ×1

pointer-arithmetic ×1

unsigned-integer ×1