将指针传递给函数中的结构类型

as3*_*unt 1 c struct typedef

这可能是一个非常基本的问题,但我是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)

但我只是怀疑我从这张照片中遗漏了一些东西.提前致谢!

bit*_*ask 6

这是不寻常的语法.我怀疑这xtype是一个宏定义的地方,可能看起来像这样

#define xtype const
Run Code Online (Sandbox Code Playgroud)

无论如何,一个变量的声明sx xtype *sp没有sp是指一个子类型xtypesx或这是最坏的预处理器魔术,我在很长一段时间看到.


至于你的第二个例子,这也没有模拟子类.这是什么:

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)

它与继承无关.