我想在内存中分配不同类型的变量。
目前,我有这个代码:
//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。
如何在不使用结构的情况下访问表中的不同值。 我在这里看到了声明
//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;