typedef struct ясность - PullRequest
3 голосов
/ 05 апреля 2011

Я путаюсь с typedef Может кто-нибудь переписать это на нормальный состав?структур?Я действительно не хочу обрабатывать typedef, потому что это вводит меня в заблуждение* ??

Ответы [ 6 ]

7 голосов
/ 05 апреля 2011

Более распространенный способ написать то же самое:

typedef struct stackNode
{
  int data;
  struct stackNode *nxtptr;

} StackNode_t;

, где stackNode - это так называемый "тег структуры", а StackNode_t - фактическое имя типа.Если вы объявляете структуры подобным образом, остальной части программы не нужно будет заниматься тегом struct, и вы можете использовать nxtptr, как если бы он был StackNode_t.

7 голосов
/ 05 апреля 2011

Если вы не хотите использовать typedef, вы всегда можете использовать полное имя типа:

Вместо:

StackNode sn;

Вы должны использовать:

struct stackNode sn;

Вместо:

StackNodePtr snp;

Вы бы использовали:

struct stackNode *snp;

Объявления точно такие же.

2 голосов
/ 12 ноября 2012
typedef struct stackNode
{
  int data;
  struct stackNode *nxtptr;

} StackNode_t;

Если вы не хотите иметь "struct stackNode" внутри структуры, я обнаружил, что могу сделать это:

typedef struct STACKNODE STACKNODE;
typedef struct STACKNODE
{
  int data;
  STACKNODE *nxtptr;
};

Чтобы вы могли кодироватьтакая вещь, и она прекрасно компилируется, и она работает просто отлично, может показаться нелогичным.Это может быть противоречивым, потому что я использую одно и то же имя для struct STACKNODE и typedef STACKNODE.И далее, я набираю typedef- ing struct до она существует как определение.Тем не менее, я обнаружил, что могу делать это с Microsoft C на многих версиях до сегодняшнего дня и с Borland C (еще тогда).

Мне это нравится, потому что, если я уже собираюсь определить структуру, яМне нравится прибегать к "struct STACKNODE * nxtptr" (т. е. использовать слово "struct") внутри определения структуры.

1 голос
/ 05 апреля 2011

Хорошо, чтобы объяснить это легко: Typedef в основном ничего не делает, кроме как сказать компилятору, что вы создаете переменные нового типа (такие как int, char и т. Д.)

Основными причинами использования typedef являются

  • Мнемонические имена. Это часто используется и в функциях библиотеки. Вместо использования стандартного типа, такого как int или long, вы можете просто ввести его в size_t. Поэтому понятно, для чего используется эта переменная.
  • Сокращение имен. Обычно используется для таких вещей, как структуры (это будет ваш случай). Чтобы избежать необходимости всегда вводить struct myStruct varname, вы можете легко использовать typedef, чтобы избавиться от структуры впереди.
1 голос
/ 05 апреля 2011

С помощью typedef вы определяете StackNode как struct stackNode , а Pointer StackNodePtr как StackNode .

Так что не понятно?

0 голосов
/ 05 апреля 2011

посмотрите, поможет ли typedef. Больше похоже на 101. Раздел, озаглавленный «Проблемы использования», может дать некоторое представление о ваших проблемах.

...