我想將不同的數據類型存儲在同一個分配的內存中,通過只分配一次內存來減少執行時間。我發現實際上可以創建一個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