我一直在用 C 语言练习动态内存分配和指针。我试着打印出随机变量来看看它是如何工作的。
它可以打印出字符和整数,但由于某种原因,无论我尝试什么,我都无法打印出我想要的浮点值。
我尝试手动输入 pi,我尝试使用 math.h
中的常量。它打印出一个巨大的完全随机数,我完全不知道为什么它不起作用。
我试过 printf("%f\n", (float) memory[3]))
和 printf("%f\n", (float) *(float *)&memory[3]))
但它不起作用。
uint16_t* rezerviraj(int sizeToAllocate){
uint16_t *reservedSpace = malloc(sizeToAllocate + 4 * sizeof(char) + sizeof(float) + sizeof(int32_t));
memset(reservedSpace, 23246, sizeToAllocate);
return reservedSpace;
}
void brisi(uint16_t* pomnilnik){
free(pomnilnik);
}
uint16_t* vstavi(uint16_t* memory){
*(char *)&memory[0] = 'X';
*(char *)&memory[1] = 'P';
*(char *)&memory[2] = 'O';
*(float *)&memory[3] = 3.141312;
*(int32_t *)&memory[4] = 23246;
*(char *)&memory[5] = '!';
return memory;
}
void print(uint16_t* pomnilnik){
printf("%c \n", (char) *(char *)&memory[0]);
printf("%c \n", (char) *(char *)&memory[1]);
printf("%c \n", (char) *(char *)&memory[2]);
printf("%f\n", (float) memory[3]);
printf("%d \n", memory[4]);
printf("%c \n", (char) *(char *)&memory[5]);
}
int main() {
uint16_t *test= (uint16_t*) rezerviraj(500);
test = vstavi(test);
print(test);
brisi(test);
return 0;
}