我对 typedef结构有一个疑问,我相信我知道答案,但想澄清一下。
让我说:
typedef struct Scanner{
//information
}myScanner;
具有与以下相同的含义
typedef struct Scanner *myScanner;
struct Scanner {
//information
};
答案 0 :(得分:0)
如果两个typedef
定义都使用相同的格式,则很容易看出差异:
typedef struct Scanner myScanner;
与
typedef struct Scanner *myScanner;
使用typedef
定义类型别名与声明变量非常相似。对于typedef
,星号表示“定义为指针”,就像对变量一样。
答案 1 :(得分:0)
类型定义通常在没有创建var的头文件中。 在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
一旦创建了变量,您就可以创建指向它的指针,因为指针必须能够指向某物。输出显示值已被成功操纵。
答案 2 :(得分:0)
typedef struct Scanner *myScanner;
—在这里,您声明指向struct Scanner
的类型指针。
typedef struct Scanner myScanner;
—是新类型的声明。
这意味着在第一种情况下,您定义了一个指向struct Scanner
的指针,以进行算术计算等所指向的元素的类型。
myScanner
的大小等于void*
的大小(操作系统上的指针大小)。
对于第二种情况,您正在定义一种新的元素;大小是
sizeof(struct Scanner) == size of(myScanner)
。