2014-12-19 4 views
-6
#include <iostream> 
#include <string> 
typedef unsigned long long ul64; 
double m[10] = { 65.45433, 45435.0054, 232543535.9, 0.00043543, 99.99999, 5345434.000, 754354.6, 80008.243, 0.9, 10.01 }; 
union foo 
{ 
    char cs[8]; 
    double x; 
    ul64 a; 
    foo(std::string s) { for (int i = 0; i < s.size(); i++) cs[i] = s[i];} 
    foo(double y) :x(y){} 
    foo(ul64 b) :a(b){} 
}; 
int main() 
{ 
    foo bar(0xe8e711395e65686d); 
    for (int i = 1; i <= 10; i++) 
     bar.x *= m[i]; 
    for (int i = 1; i <= 8; i++) 
     std::cout << bar.cs[i]; 
    std::cout << std::endl; 
    return 0; 
} 

내 시험용으로이 코드가 있지만 무엇을하고 있는지 알 수 없습니다. 도와주세요, 제발! 나는 그것이 약간의 오류를 가지고 있고 어떤 것을 표시한다는 것을 알고 있습니다.이 코드가 수행하는 작업 &

+0

노조는 무엇인지 알고 있습니까? – gnasher729

+0

이 코드는 잔인하며 실행중인 프로세서에 따라 달라집니다 –

+2

배열 m이 1에서 10까지이므로 정의되지 않은 동작이 있습니다. –

답변

0

어쩌면 이것은 당신을 압도 할 것입니다.

그냥 메인의 첫 번째 줄에서 시작 :

foo bar(0xe8e711395e65686d); 

할 무엇? 변수 foo가있는 bar라는 변수를 만들고 매개 변수 0xe8e711395e65686d로 생성자를 호출합니다. 그러면 어떻게 될까요?

Mooing Duck의 의견 읽기 : 의도 한 바는 무엇이며 의도 한대로 할 수 있도록 어떻게 수정합니까?

for (int i = 1; i <= 10; i++) 
for (int i = 1; i <= 8; i++) 

모두 같은 초보자의 실수가 포함

당신은 두-루프를 가지고있다. 실수는 무엇입니까? 고쳐.

마지막으로 출력 루프에서 사용자는 공용체가 무엇인지 이해해야합니다. 코드는 이상하지만 아직까지 어떻게되는지 설명 할 수 있어야합니다.