我有以下代码,在运行时生成垃圾值输出:
#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
但是,当我在main中将类型从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。
这是不是由于指针?
答案 0 :(得分:2)
将指针强制转换为其他类型不会更改原始指针指向的值。您只能安全地转换值而不是指针。
当您看到您的演员要从索引int
读取其他x[1]
值并将其显示为int64_t
时。
不要在你的函数中强制转换指针 - 强制转换值然后它就可以了。