C++ 在CodeComposer Studio中取消引用指针

C++ 在CodeComposer Studio中取消引用指针,c++,pointers,code-composer,C++,Pointers,Code Composer,我在一个无符号字节数组中收到一个值,我希望将其作为浮点解引用。将ptr作为一个uint8_t*,指向四个值0,0,0xCD,0x42的字节数组(这是一个小的尾端系统) 返回值为-1.34e8 当我打字时: *(float*)ptr; *(float*)(ptr - 1); 在该段代码中遇到断点后,在表达式窗口中,它给出了预期的102.5。此外,当我键入: *(float*)ptr; *(float*)(ptr - 1); 我得到了不正确的-1.34e8,好像编译器使用了ptr-1而不是我

我在一个无符号字节数组中收到一个值,我希望将其作为浮点解引用。将ptr作为一个uint8_t*,指向四个值0,0,0xCD,0x42的字节数组(这是一个小的尾端系统)

返回值为-1.34e8

当我打字时:

*(float*)ptr;
*(float*)(ptr - 1);
在该段代码中遇到断点后,在表达式窗口中,它给出了预期的102.5。此外,当我键入:

*(float*)ptr;
*(float*)(ptr - 1);
我得到了不正确的-1.34e8,好像编译器使用了ptr-1而不是我键入的内容

我很困惑-我是不是遗漏了什么

*(float*)(ptr - 1); 
和这个一样吗

ptr--; //move the pointer to point to charackter in front of the previous one
*(float*)ptr;
这是你的意图吗?
或者,您只是想从指向ptr的值中减去1。

基本上,deref是正确的

如果您
printf(“%p”,ptr)您得到的地址可能不是4字节对齐(或至少是2字节对齐)的吗?这在某些平台上可能是必要的

对于测试,只需在uint8_t*中传递实浮点值,例如

float f= 102.5; 
yourfunct((uint8_t*)&f); 

看看这是否有效。

基本上,这个定义是正确的。如果您打印f(“%p”,ptr);您得到的地址可能不是4字节对齐(或至少是2字节对齐)的吗?(这在某些平台上可能是必要的)。顺便说一句,(ptr-1)返回一个字节(因为它是uint8_t*),而不是通常返回一个浮点大小。是的,这很奇怪。ptr-1返回了一个字节,所以就好像我的原始代码(float)ptr一样;正在向后查看一个字节,并从那里而不是从ptr解释四个浮点字节。我的观点是,当代码在调试器中停止时,(float)ptr给出了我在运行时期望得到的结果,(float)(ptr-1)给出了我在运行时实际得到的结果。如果ptr值没有正确对齐,可能编译器正在舍入ptr值。尝试printf(“%p”,ptr);在源代码中,然后检查调试器给出的结果是否相同(只需在dbg中打印指针本身)。此外,对于测试,只需在uint8_t*中传递一个实浮点值,例如float f=102.5;yourfunct((uint8_t*)&f);我做了printf,找到内存中的位置,验证它是否指向第一个0。与调试器匹配,但值仍然不同。但我认为这一定是一个对齐的问题,因为取消对ptr+1的引用仍然给了我与ptr-1的等价物。编译器这样做是正常的,还是CCS只是另一个噩梦?我不想从中减去。我要说的是,在运行时,将ptr作为浮点解引用就像我将指针解引用回一个字节一样。