我想将不同的数据类型存储在同一个分配的内存中,通过只分配一次内存来减少执行时间。我发现实际上可以创建一个uint8_t
变量的数组,并创建一个新的uint16_t
指向相同内存地址的指针,然后我可以两种方式读取这些值。可以将不同的数据类型存储在C中相同的分配内存中吗?
这允许我创建一个指针,让我们说分配的内存的中间,并将数据的后半部分存储在不同的数据类型中。
这样可以吗?我知道我需要关注记忆界限,但这是不好的风格?
这里我的代码:
#include <stdio.h>
#include <inttypes.h>
#include <stdint.h>
#include <stdlib.h>
int main(void){
uint8_t *array;
uint16_t *array2;
array = calloc(6, 1);
array[0] = 257;
printf("array[0]= %" PRIu8 "\n", array[0]);
printf("array[1]= %" PRIu8 "\n", array[1]);
printf("Adresse von array[0] = %p\n", &array[0]);
array2 = &array[0];
printf("Adresse auf die array2 zeigt = %p\n", array2);
array2[0] = 257;
printf("array2[0]= %" PRIu16 "\n", array2[0]);
printf("array2[1]= %" PRIu16 "\n", array2[1]);
printf("array[0]= %" PRIu8 "\n", array[0]);
printf("array[1]= %" PRIu8 "\n", array[1]);
getchar();
return 0;
}
阅读关于union –
但实际上你并没有在同一个分配的内存中存储不同数据类型的dada。 – ameyCU
由于数据类型可能有不同的内存对齐要求,因此手动执行此操作是一种不好的做法。使用“联合”。 – kfx