В C++/C вы можете сделать это:LLVM-IR назначение указатель массива
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-IR, или это сразу жалуются на проблемы с типами. Собирался погрузиться в это, но думал, что увижу, пробовал ли кто-нибудь этот конкретный пример. Будет ли я GEP A 0-м местом как i8 *, а затем B и C как i32 *. Я немного смущен, как продолжать, если это вообще возможно.
Спасибо заранее.
ОБНОВЛЕНИЕ:
Хорошо, если я вместо этого добавили инициализации для * В и С [0], С [1], было бы изменение ответ для LLVM-IR/C/C++?
Да, исправлено. Благодарю. – redratio1
Предполагая, что вы исправите бит о не инициализации '* B' и' C [0] 'и' C [1] ', все это делает, беря' unsigned int' (или 'int' соответственно), на которые указывает' B 'или' C', усечь его до размера 'char' и присвоить его слоту в массиве' A'. Вы должны получить предупреждение о потере точности, предполагая, что вы не игнорируете все предупреждения, но из-за стандартных преобразований между интегральными типами это законно, если несколько сомнительно ... – twalberg
@twalberg; Спасибо, это имеет смысл/я предполагал, что, поскольку есть непрерывная память, я мог бы уйти с помещением большего массива в массив. и имеют биты, расширенные по распределению А. – redratio1