[英]typedef struct as pointer?
关于typedef struct,我有一个问题,我相信我知道答案,但需要澄清。
可以说我有:
typedef struct Scanner{
//information
}myScanner;
其含义是否与:
typedef struct Scanner *myScanner;
struct Scanner {
//information
};
如果您对两个typedef
定义使用相同的格式,则很容易看出差异:
typedef struct Scanner myScanner;
与
typedef struct Scanner *myScanner;
使用typedef
定义类型别名与声明变量非常相似。 对于typedef
,星号表示“定义为指针”,就像对变量一样。
类型定义通常在没有创建变量的头文件中。 在main()中,应该使用此类型创建var。 在我们的示例中,新创建的类型是“扫描仪”。
#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, %c\n",
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)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.