【发布时间】:2018-11-03 20:22:15
【问题描述】:
我不是有史以来最伟大的 C 程序员,所以这可能是一个愚蠢的问题,但有没有办法让特定结构的所有类型都引用另一个结构的相同结构实例?
这方面的一个例子是:
#include <stdio.h>
#include <stdlib.h>
int idxgiver;
typedef struct component component_t;
typedef struct componentA componentA_t;
typedef struct componentB componentB_t;
static struct component{
int idx;
};
struct componentA{
component_t component;
};
struct componentB{
component_t component;
};
componentA_t *componentA_init(){
componentA_t *a = malloc(sizeof(componentA_t));
if(a->component.idx == 0){
a->component.idx = idxgiver;
idxgiver++;
}
return a;
}
componentB_t *componentB_init(){
componentB_t *b = malloc(sizeof(componentB_t));
if(b->component.idx == 0){
b->component.idx = idxgiver;
idxgiver++;
}
return b;
}
int main(){
componentA_t *a = componentA_init();
componentB_t *b = componentB_init();
printf("%d\n", a->component.idx);
printf("%d\n", b->component.idx);
componentB_t *b2 = componentB_init();
printf("%d\n", b2->component.idx);
return 0;
}
此代码的目标是根据每个组件的类型为每个组件赋予其独特的值,因此理想情况下,这段代码的结果是组件 A 获得值 0(它确实如此)。组件 B 得到值 1(它确实如此),组件 B2 也得到值 1(它没有得到 2)?
因此,如果有任何指向此或任何想法的指针,将不胜感激。
【问题讨论】:
-
你的编译器不抱怨
static struct component{ int idx; };吗? -
您的代码有未定义的行为。
if(a->component.idx == 0){访问a->component.idx,这是未初始化的。 -
查看这个问题 [和我的回答],因为它可能会有所帮助:stackoverflow.com/questions/52788369/…