繁体   English   中英

typedef结构作为指针?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM