我们如何在不知道其名称的情况下访问结构的成员?
例如:这是我的结构。
struct A
{
int a;
char b;
int c;
}
现在我想访问结构A的char成员而不使用它的名字。
我只有一个指向该结构的指针。
示例:struct A * temp;
现在我需要访问' temp'。
我知道这个How would you access a C structure's members without knowing the name?的问题是相似的, 但它并没有澄清我的怀疑。
答案 0 :(得分:2)
从评论中,我了解到您有以下功能
struct A;
void foo( struct A * temp )
{
// access temp->b here
}
如果您可以包含具有结构A定义的文件,请执行此操作
#include "A.h"
void foo( struct A * temp )
{
do_something_with_b(temp->b);
}
如果您不能包含该文件,请执行Luc Forget在其答案中建议的内容:
声明具有相同结构的struct B
,并将temp
投射到struct B
。由于struct B
的内存布局与struct A
相同,因此访问((struct B*)temp)->e
与访问A->b
相同。
答案 1 :(得分:1)
如果你是什么结构字段,我认为访问字段的最简单方法是声明另一个具有相同字段的结构B,并将结构A *转换为结构B,然后访问&#34中的字段;传统"办法。 这是我的意思的一个简单例子:
#include <stdlib.h>
#include <stdio.h>
struct A {
int a;
char b;
int c;
};
struct B {
int d;
char e;
int f;
};
void printStruct(void* struct_ptr)
{
struct B *tmp = struct_ptr;
fprintf(stdout, "a:%d b:%c c:%d\n", tmp->d, tmp->e, tmp->f);
}
int main(int argc, char** argv)
{
struct A test = { 42, 'A', 24 };
printStruct(&test);
}
这里printStruct&#34;不知道&#34;结构A的字段名称但可以访问它们
答案 2 :(得分:1)
如果您知道成员的类型和顺序(以及打包)那么您可以创建另一个结构并投射指针,如下所示:
struct AMirror {
int a;
char b;
int c;
};
void function_to_use_struct(AMirror *ptr);
...
A *s;
...
function_to_use_struct((AMirror*)s);
答案 3 :(得分:0)
我想一种方法是强制转换char*
,但在这种情况下,您必须知道成员声明的类型和顺序。
答案 4 :(得分:0)
以下代码应该有效
void *b=temp;
int *c = (int *) b;
cout<<"Value1: "<<*c <<endl;
char *cc =(char *) (b+4);
cout<<"Char1: "<<*cc<<endl;
c =(int *) (b+6);
cout<<"Value2: "<<*c<<endl;