有人可以向初学者“C”程序员解释什么是*sometext
?我怎么用呢?首先sometext
是结构的名称,因为我不准。
typedef struct
{
ULONG x;
ULONG y;
} SOMETEXT, *SOMETEXT;
答案 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;