C语言 typedef struct as pointer?



我有一个关于typedef结构的问题,我相信我知道答案,但希望得到一些澄清。

假设我有:

typedef struct Scanner{
//information
}myScanner;

这是否具有相同的含义:

typedef struct Scanner *myScanner; 
struct Scanner {
//information
};

如果对两个typedef定义使用相同的格式,则很容易看出差异:

typedef struct Scanner myScanner;

typedef struct Scanner *myScanner;

使用typedef定义类型别名与声明变量非常相似。对于typedef,星号表示"定义为指针",就像变量一样。

类型定义通常位于不创建 var 的头文件中。 在你的main((中,你应该使用这个类型来创建vars。在我们的示例中,新铸造的类型是"扫描仪"。


#include <stdio.h>
#include <stdlib.h>
struct _scanner
{       // example
int a;
double b;
char c;
};
typedef struct _scanner Scanner;

int main()
{
Scanner s;
s.a = 10;
s.b = 3.14;
s.c = 'N';
// -------------------
// If you want to have a
//  pointer p to scanner, then
Scanner* p = &s;
p->a = 20;
p->b = 2.72;
p->c = 'Y';
printf("%d, %.2lf, %cn",
s.a, s.b, s.c);
return EXIT_SUCCESS;
}

输出:

20, 2.72, Y

创建变量后,您可以创建指向它的指针,因为指针必须能够指向某些内容。输出显示已成功操作值。

typedef struct Scanner *myScanner;— 这里你声明的是指向struct Scanner的类型指针。

typedef struct Scanner myScanner;— 是一种新类型的声明。

这意味着,在第一种情况下,您定义一个指向struct Scanner的指针,用于算术计算等,指向的元素类型。myScanner的大小等于void*的大小(操作系统上的指针大小(。

对于第二种情况,您正在定义一种新的元素类型;它的大小为
sizeof(struct Scanner) == size of(myScanner)

最新更新