1

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

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

4

1 回答 1

6

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

#define xtype const

无论如何,变量的声明sx xtype *sp没有说它sp引用了的子类型xtypesx或者这是我很长时间以来见过的最糟糕的预处理器魔法。


至于你的第二个例子,这也不是子类化的模型。这是什么:

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

说的是那struct A是一样的B。它是一个typedef:它只是定义了一个新类型,一个较长名称的简短改写版本。

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

它与继承无关。

于 2012-09-16T06:19:14.323 回答