我有一个函数在需要作为输入的整数我的C++应用程序。可悲的是这个整数只是一个usigned字符数组,这不由得我做到这一点的形式提供:这两个演员之间有什么区别?
unsigned char c[4] = {'1','2','3','4'};
void myFuncThatBadlyNeedsInts(int i)
//compares some memory value(which is an int) with anotherone...
myFuncThatBadlyNeedsInts((int)c);
这给了我一个错误,它告诉我,这是不允许的。 但是,如果我决定要棘手,做到这一点:
myFuncThatBadlyNeedsInts(*((int*)&c));
现在程序进入有关,给我总是我想要的结果。我的问题是:为什么两个演员的结果有差异? 难道他们不应该都做同样的,用之探源我在过程中的两个三分球不必要的?
帮助或指导的alredy现有的答案,我qustion是非常赞赏。
编辑(因为我不能评论):需要这个确实无聊的转换,从一个DWORD至极,其比较特定内存位置(作为int)一个项目在继承从FGPA retrived并以数组形式出现。 DWORD最后读取为一个十六进制数字。 我会尽力获得更改,并感谢所有人的快速回复。我真的没有得到这个程序的部分,我也不明白为什么它首先这样工作。现在我知道有人很幸运
P.S:因为即时通讯新来的,这是我第一次qustion请让我知道你可能需要的其他具体或只需编辑我牛逼misshabits了。
虽然我已经回答了你的两个电话会发生什么,我不能说你真正应该做的事情,因为我不知道你真正想做的事。你想将整个数组作为单个32位整数传递吗?只传递数组中的一个元素?请详细说明您尝试解决的*实际*问题([关于XY问题的相关阅读](http://xyproblem.info/))。 –
这是为什么在C和C++中存在联合概念的一个更好的原因 - 它允许你真正地告诉编译器你在做什么。现在你欺骗它变成做飕权..... – tofro
@tofro使用工会办[*类型双关*](https://en.wikipedia.org/wiki/Type_punning)在C行不行,但不是在C(它明确地在说明书中提及)++其中它违反了[*串混叠规则*](http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule)。 –