-2
私が実行したときにジャンク値出力を生成し、次のコードを、持っている:int starからvoid starへ、そしてint64_t starからtypecastできないのはなぜですか?
#include <iostream>
#include <cstdlib>
#include <stdio.h>
using namespace std;
void printer(void* x, int length, int y){
if(y == 0){
int64_t* z = (int64_t*) x;
for(int i=0;i<length;i++){
printf("%ld\n", z[i]);
}
}
}
int main(){
int length = 4;
int* x = (int*) malloc(length * sizeof(int));
int y = 0;
x[0] = 1;
x[1] = 4;
x[2] = 1;
x[3] = 4;
printer(x, length, y);
}
Output:
17179869185
17179869185
0
132049
をしかし、私がメインでint
からint64_t
にタイプを変更すると、それが正常に動作しますが:
#include <iostream>
#include <cstdlib>
#include <stdio.h>
using namespace std;
void printer(void* x, int length, int y){
if(y == 0){
int64_t* z = (int64_t*) x;
for(int i=0;i<length;i++){
printf("%ld\n", z[i]);
}
}
}
int main(){
int length = 4;
int64_t* x = (int64_t*) malloc(length * sizeof(int64_t));
int y = 0;
x[0] = 1;
x[1] = 4;
x[2] = 1;
x[3] = 4;
printer(x, length, y);
}
Output:
1
4
1
4
のはなぜですこの? int
とint64_t
の間の変換がうまくいるようです:How do you convert int into int64_t これは何とかポインタが原因ですか?
アレイから2つの 'int'を一度に出力しています(これは、' int64t'の値が高い--'17179869185 = 1 + 4 * 2^32'です)、後半は範囲外です。あなたは何を期待しましたか、何をしたいですか? – LogicStuff
申し訳ありませんが、一度に2つの値をどのくらい正確に表示していますか? – Alex
'int'は32ビット以下であり、' int64_t'は64であり、配列要素は連続して格納されます... – LogicStuff