typedef结构作为指针?

时间:2018-10-24 13:14:03

标签: c struct

我对 typedef结构有一个疑问,我相信我知道答案,但想澄清一下。

让我说:

typedef struct Scanner{
    //information
}myScanner;

具有与以下相同的含义

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

3 个答案:

答案 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)