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