如何将结构视为内存位置并使用指针分别访问元素
How to treat a structure as a memory location and access elements separately using pointers
我有一个结构
typedef struct
{
unsigned char status;
unsigned char group_id;
unsigned char acc_trip_level;
unsigned char role[50];
unsigned char standard_panic_header[50];
unsigned char high_threat_message[50];
unsigned char high_threat_header[50];
}cfg;
cfg test_val;
我将这个结构作为参数传递给一个函数,我怎样才能 get/access 按内存位置的结构元素(换句话说,我想按内存地址处理这个结构)
void foo(cfg *ptr)
{
printf("%zu\n", sizeof(*ptr)); //Gives size of the strcture
printf("%p\n", (void*)ptr); //Gives the starting address of strcure
printf("%p\n", (void*)(ptr+4)); //I want to access the 4th element/ memorylocation
}
给我结果
203
0x8049780
0x8049aac
但它应该给出 8048780+4 = 8048784 正确..我错过了什么吗
试试这个:
void foo(cfg *ptr)
{
printf("%zu\n",sizeof(cfg)); //Gives size of the strcture
printf("%x\n",ptr); //Gives the starting address of strcure
printf("%x\n",ptr->role); //I want to access the 4th element/ memorylocation
}
如果您的目标是通过使用索引偏移来访问结构的内部元素,我建议实现哈希 table。
这对我有用:
void foo(cfg * ptr)
{
printf("%zu\n", sizeof(*ptr));
printf("%p\n", ptr);
printf("%p\n", (void *)((char *) ptr + 4));
}
然后:
$ ./a.out
203
0x7fffb6d04ee0
0x7fffb6d04ee4
当你单独使用 (ptr + 4)
时,你基本上得到了 (ptr + 4 * sizeof(cfg))
,因为指针算法与指针对象的大小一起工作,正如有人已经评论过的那样。
此外,地址应使用格式说明符 %p
。
我有一个结构
typedef struct
{
unsigned char status;
unsigned char group_id;
unsigned char acc_trip_level;
unsigned char role[50];
unsigned char standard_panic_header[50];
unsigned char high_threat_message[50];
unsigned char high_threat_header[50];
}cfg;
cfg test_val;
我将这个结构作为参数传递给一个函数,我怎样才能 get/access 按内存位置的结构元素(换句话说,我想按内存地址处理这个结构)
void foo(cfg *ptr)
{
printf("%zu\n", sizeof(*ptr)); //Gives size of the strcture
printf("%p\n", (void*)ptr); //Gives the starting address of strcure
printf("%p\n", (void*)(ptr+4)); //I want to access the 4th element/ memorylocation
}
给我结果
203
0x8049780
0x8049aac
但它应该给出 8048780+4 = 8048784 正确..我错过了什么吗
试试这个:
void foo(cfg *ptr)
{
printf("%zu\n",sizeof(cfg)); //Gives size of the strcture
printf("%x\n",ptr); //Gives the starting address of strcure
printf("%x\n",ptr->role); //I want to access the 4th element/ memorylocation
}
如果您的目标是通过使用索引偏移来访问结构的内部元素,我建议实现哈希 table。
这对我有用:
void foo(cfg * ptr)
{
printf("%zu\n", sizeof(*ptr));
printf("%p\n", ptr);
printf("%p\n", (void *)((char *) ptr + 4));
}
然后:
$ ./a.out
203
0x7fffb6d04ee0
0x7fffb6d04ee4
当你单独使用 (ptr + 4)
时,你基本上得到了 (ptr + 4 * sizeof(cfg))
,因为指针算法与指针对象的大小一起工作,正如有人已经评论过的那样。
此外,地址应使用格式说明符 %p
。