如何在c中使用不同变量类型的内存分配?

问题描述 投票:0回答:1

我想在内存中分配不同类型的变量。

目前,我有这个代码:

    //key=4bytes(char), name= 4chars=4bytes, age=4bytes ==>12* 20 elements
    uint16_t * table = (uint16_t*)malloc(12*20);
    char* key = (char*) table ;
    char* name = (char*) table ;
    int* age = (int*)table ;
    key[0] = 'c';
    key[1] = 'i';
    key[2] = 'r';
    // key = "cir";
    // name = "pav";
    name[0] = 'p';
    name[1] = 'a';
    name[2] = 'v';
    *age = 15;

    char* key2 = (char*) table ;
    char* name2 = (char*) table ;
    int* age2 = (int*)table ;
    
    // key2 = "ric";
    // name2 = "vap";
    key2[0] = 'r';
    key2[1] = 'i';
    key2[2] = 'c';
    name2[0] = 'v';
    name2[1] = 'a';
    name2[2] = 'p';
    *age2 = 12; 

我现在想访问(printf 到屏幕)内存中的不同变量,但我无法执行此操作,除非在上面代码末尾使用 printf 时的最后一个元素:

printf("%d ", *(table));  // prints 12

我尝试使用 %s 或 %c 执行

*(table-4)
但如果 %c 则没有任何效果总是显示空白 如果我尝试通过执行
*(table-12)
来找到数字 15,则为 0。

如何在不使用结构的情况下访问表中的不同值。 我在这里看到了声明 I want this

c pointers dynamic-memory-allocation
1个回答
0
投票
您似乎在问如何手动布局结构。您可以通过强制转换和指针算术来做到这一点,但需要小心填充和对齐。你可能会这样做:

//key=4bytes(char), name= 4chars=4bytes, age=4bytes ==>12 bytes total // 20 elements in an array, so equivalent to // struct { // char key[4]; // char name[4]; // int age; // } table[20]; void * table = malloc(12 * 20); // setting element 0 of the table: char* key = (char*)table + 0; char* name = (char*)table + 4; int* age = (int *)((char*)table + 8); key[0] = 'c'; key[1] = 'i'; key[2] = 'r'; key[3] = 0; // key = "cir"; // name = "pav"; name[0] = 'p'; name[1] = 'a'; name[2] = 'v'; name[3] = 0; *age = 15; // setting element 1 char* key2 = (char*)table + 12 + 0; char* name2 = (char*)table + 12 + 4 ; int* age2 = (int*)((char*)table + 12 + 8); // key2 = "ric"; // name2 = "vap"; key2[0] = 'r'; key2[1] = 'i'; key2[2] = 'c'; key2[3] = 0; name2[0] = 'v'; name2[1] = 'a'; name2[2] = 'p'; name2[3] = 0; *age2 = 12;
    
© www.soinside.com 2019 - 2024. All rights reserved.