在C++/C中,您可以这样做:
unsigned char A[12];
unsigned int *B;
int *C;
B = malloc(sizeof(unsigned int));
C = malloc(2*sizeof(int));
A[0] = *B;
A[4] = *C;
//Then go on to access A byte by byte.我想知道在LLVM中这是可能的,还是会立即抱怨类型的问题。我想我会看看有没有人试过这个例子。我会把GEP A的第0位定位为i8*,然后B和C作为i32*。如果可能的话,我有点搞不懂该怎么做。
提前谢谢。
更新:
好的,如果我为*B和C,C1添加了初始化,那么LLVM /C / C++的答案会改变吗?
发布于 2014-01-13 22:47:50
LLVM有bitcast指令,它通常用于将一种类型的指针转换为另一种类型的指针-例如,i32*到i8*。
因此,例如,如果您想访问一个4字节数字的第3字节,那么执行以下操作是完全合法的:
%bytes = bitcast i32* %num to i8*
%third_byte = getelementptr i8* %bytes, i32 2当你做那样的事的时候要记住你的恩典。
是的,您可以使用这种技术从数组中获取指向特定位置的指针以及store和load值,从而使您能够复制整个示例。
发布于 2014-01-13 22:17:07
不是的。这在C/C++中也是不可能的。不应将未初始化的变量赋值给另一个变量。它调用未定义的行为。*B和*c未初始化。
https://stackoverflow.com/questions/21102434
复制相似问题