typedef struct как указатель? - PullRequest
       4

typedef struct как указатель?

0 голосов
/ 24 октября 2018

У меня есть вопрос по поводу typedef struct , на который, я полагаю, я знаю ответ, но хотел бы получить некоторые разъяснения.

Допустим, у меня есть:

typedef struct Scanner{
    //information
}myScanner;

Будет ли это иметь то же значение, что и:

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

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Определения типов обычно находятся в заголовочном файле, где не создаются переменные.В вашем main () вы должны использовать этот тип для создания переменных.В нашем примере новый отчеканенный тип - «Сканер».


#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

После создания переменной вы можетесделать указатель на него, так как указатель должен быть в состоянии указать на что-то.Вывод показывает, что значения были успешно обработаны.

0 голосов
/ 24 октября 2018

typedef struct Scanner *myScanner; - здесь вы объявляете указатель типа на struct Scanner.

typedef struct Scanner myScanner; - это объявление нового типа.

Что это означает, вВ первом случае вы определяете указатель на struct Scanner, для арифметических вычислений и т. д., тип элемента, на который указывает.Размер myScanner будет равен размеру void* (размер указателя на вашей ОС).

Во втором случае вы определяете новый тип элемента;его размер
sizeof(struct Scanner) == size of(myScanner).

0 голосов
/ 24 октября 2018

Будет легко увидеть разницу, если вы будете использовать один и тот же формат для обоих typedef определений:

typedef struct Scanner myScanner;

против

typedef struct Scanner *myScanner;

Определение псевдонима типа с помощью typedef равно очень похоже на объявление переменных.Для typedef звездочка означает «определить как указатель», как и для переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...