| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 760 人关注过本帖, 1 人收藏
标题:C语言中typede的问题
只看楼主 加入收藏
有风的夜晚
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:26
注 册:2010-3-9
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:3 
C语言中typede的问题
在C语言中用typedef不都是:

typedef struct
{
.....
}XX;
XX xx;  吗?

为什么可以这样:
1.
typedef struct node *pointer;     //在定义 node 之前使用 node?
struct node
{
    int data;
    pointer next;
};
2.
typedef struct QNode            //为什么会出现 QNODE 两次?
{
   int data;
   struct QNode * next;
}QNode, * QueuePtr;
搜索更多相关主题的帖子: C语言 typede 
2010-04-23 15:26
ltyjyufo
Rank: 9Rank: 9Rank: 9
来 自:未来
等 级:蜘蛛侠
威 望:2
帖 子:353
专家分:1166
注 册:2009-10-25
收藏
得分:5 
  是用typedef是为了取个别名;
例:            typedef int  INT   后INT就可以像int一样用来定义整型的变量了

翱翔天空的雄鹰固然令人羡慕,却容易被禁锢于牢笼之中,只有那夜色中的蝙蝠才是真正自由的飞翔者....
2010-04-23 20:28
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:5 
你所说的第一个问题是毫无疑问可以通过编译的,因为你定义的是指针,
并没有涉及结构体的细节,所以,编译器不会报错。

至于第二个问题,是否可以给出相关的代码。发出来看看

[ 本帖最后由 南国利剑 于 2010-4-23 23:22 编辑 ]

南国利剑
2010-04-23 23:20
有风的夜晚
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:26
注 册:2010-3-9
收藏
得分:0 
程序代码:
#include <stdio.h>
#include<stdlib.h>
#include<iostream.h>
typedef struct QNode{
   int data;
   struct QNode * next;
}QNode, * QueuePtr;


typedef struct
{
   QueuePtr front;
   QueuePtr rear;
}LinkQueue;
LinkQueue Q;

int InitQueue( )
{
    QueuePtr p;

     Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
     if(!Q.front)
     {
        printf("OVERFLOW");
        return 0;
     }
     p->next=NULL;
     return 1 ;
}

void DestroyQueue( )
{
     while(Q.front)
     {
       Q.rear=Q.front->next;
       free(Q.front);
       Q.front=Q.rear;
     }
}

int EnQueue ( )
{
    QueuePtr p;
    int e;

    p=(QueuePtr)malloc(sizeof(QNode));
    if(!p)
    {
        printf("OVERFLOW");
        return 0;
    }

    printf("Input the data:\n");
    scanf("%d",&e);

    p->data=e;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
}
void DeQueue( )
{
  int e;
  QueuePtr p;

  if(Q.front==Q.rear)
    {
        printf("The queue is empty!\n\n");
        return ;
    }

  p=Q.front->next;
  e=p->data;

  printf("The top data is:  %d\n\n",e);

  Q.front->next=p->next;
  if(Q.rear==p) Q.rear=Q.front;

  free(p);
}

void PrintQueue( )
{
     QueuePtr p;
     int i=1;

     if(Q.front==Q.rear)
     {
        printf("ERROR!\nThe Queue is empty!\n");
        return ;
     }

     printf("The Queue is:\n");

     p=Q.front->next;

     while(p!=Q.rear)
     {
        printf("%d     %d\n",i++,p->data);
        p=p->next;
     }

     printf("%d     %d\n\n",i,p->data);
}

int main()
{
  int i=1;

  while (i)
  {
    printf("1.        Create a Queue\n");
    printf("2.        Destroy the Queue\n");
    printf("3.        Insert a data\n");
    printf("4.        Delete a data\n");
    printf("5.        Print the Queue\n");
    printf("0.        Exit\n\n");
    printf("What do you want to do?\n");

    scanf("%d",&i);
    switch(i)
    {
        case 1:   InitQueue();break;
        case 2:   DestroyQueue();break;
        case 3:   EnQueue();break;
        case 4:   DeQueue();break;
        case 5:   PrintQueue();break;
        case 0:   return 1;

        default:  printf("ERROR!  Try again!\n");
    }
   }

    

    return 1;
}



以上就是源程序
谢了


对了,我还试了一下,似乎QNode还是类型名
2010-04-26 17:34
快速回复:C语言中typede的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.096400 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved