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

时间:2012-09-16 06:08:21

标签: c struct typedef

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

但我只是怀疑我错过了这张照片中的一些东西。 提前致谢!

1 个答案:

答案 0 :(得分:6)

这是不寻常的语法。我怀疑xtype是在某处定义的宏,可能看起来像这样

#define xtype const

无论如何,变量sx xtype *sp的声明确实表示sp指的是xtype的子类型sx或此是我在很长一段时间里见过的最糟糕的预处理器魔术。


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

typedef struct A {
  /* ... */
} B;

struct AB相同。这是一个typedef:它只是定义了一个新类型,一个较长名称的简短重新版本。

void func(struct A);
void func(B); // exactly equivalent

它没有没有与继承有关。