声明“typedef struct”的指针

时间:2018-04-01 14:34:42

标签: c pointers struct typedef declaration

有人可以向初学者“C”程序员解释什么是*sometext?我怎么用呢?首先sometext是结构的名称,因为我不准。

typedef struct
{
   ULONG x;
   ULONG y;
} SOMETEXT, *SOMETEXT;

3 个答案:

答案 0 :(得分:3)

相当于:

struct unnamed_type_that_im_giving_a_name_to_here {
   ULONG x;
   ULONG y;
};

struct unnamed_type_that_im_giving_a_name_to_here SOMETEXT;
struct unnamed_type_that_im_giving_a_name_to_here *SOMETEXT;

请注意,这是无效代码,因为您需要两次SOMETEXT。但我假设你的实际代码中有不同的名称。

答案 1 :(得分:0)

使用一个typedef可以为类型引入几个别名。

这是一个简单的示范程序

#include <stdio.h>

typedef int INT_TYPE, *INT_PTR;

int main(void) 
{
    INT_TYPE x = 10;
    INT_PTR p = &x;

    printf( "x = %d\n", *p );

    return 0;
}

它的输出是

x = 10

在程序中,typedef引入了两个别名:INT_TYPE类型int和类型INT_PTR int *

至于你的typedef的例子,那么对于初学者来说它是无效的,因为相同的标识符SOMETEXT用于在范围内声明两种不同的类型。

但是,如果要重命名第二个标识符,例如SOMETEXT_PTR,则此typedef

typedef struct
{
   ULONG x;
   ULONG y;
} SOMETEXT, *SOMETEXT_PTR;

你可以想象两个独立的typedef

typedef struct
{
   ULONG x;
   ULONG y;
} SOMETEXT;

typedef SOMETEXT *SOMETEXT_PTR;

SOMETEXT是未命名结构的别名,SOMETEXT_PTR是指向未命名结构的类型指针的别名。

答案 2 :(得分:0)

我在下面看到: -

typedef struct SOMETEXT
{
   ULONG x;
   ULONG y;
};

这里我们声明了struct(结构),其名称为SOMETEXT,这就是为什么这种声明是调用用户定义类型。

所以现在我们使用如下结构的名称: -

  struct SOMETEXT  *s, *p, *q;

所以在上面的代码中我们声明了3个SOMETEXT类型的指针。如果您每次在名称SOMETEXT前面使用struct时都注意到了。为避免这种情况,我们将为SOMETEXT提供一个别名,如下所示: -

  typedef struct SOMETEXT1
  {
    ULONG x;
    ULONG y;
  } *SOMETEXT;

所以现在我们可以像下面那样声明SOMETEXT的指针: -

  SOMETEXT s, p, q;

在这里,我们不需要在每个变量前面使用*。这与先前的struct SOMETEXT *s, *p, *q;

声明相同