这可能是一个非常基本的问题,但我是C的新手,所以请耐心等待。
我正在阅读一些用C编写的固件的文档,我遇到了这个:
typedef struct {
int x;
int arr[10];
} sx;
然后我有一个函数,其中传递了指向该类型的指针。
int f(sx xtype *sp, int i){
return sp -> arr[i];
}
我不确定两件事情在哪里: 根据我的Java经验,我认为第一个片段相当于一个类似于Java中的Object类的超类,然后第二个片段使用了sx的子类。但是我不确定。有人可以确认吗? 从我迄今为止的小C经验来看,我认为更容易理解的方法是将指针传递给类型如下:
typedef struct xtype {
int x;
int arr[10];
} sx;
int f(sx *sp, int i){
return sp -> arr[i];
}
但我只是怀疑我错过了这张照片中的一些东西。 提前致谢!
答案 0 :(得分:6)
这是不寻常的语法。我怀疑xtype
是在某处定义的宏,可能看起来像这样
#define xtype const
无论如何,变量sx xtype *sp
的声明确实不表示sp
指的是xtype
的子类型sx
或此是我在很长一段时间里见过的最糟糕的预处理器魔术。
至于你的第二个例子,这也没有模拟子类。这是什么:
typedef struct A {
/* ... */
} B;
说struct A
与B
相同。这是一个typedef
:它只是定义了一个新类型,一个较长名称的简短重新版本。
void func(struct A);
void func(B); // exactly equivalent
它没有没有与继承有关。