【基础知识】typedef和#define的区别

(1)语法形式

        typedef 是 C语言的关键字,用于创建类型别名,它需要使用标识符和现有的类型进行配合;#define 是预处理指令,用于创建宏定义,它可以定义任意的标识符和文本替换。

(2)用法不同

        typedef 用来定义一种数据类型的别名,增强程序的可读性;#define 主要用来定义常量,以及书写复杂使用频繁的

(3)执行时间不同

        typedef 是编译过程的一部分,有类型检查的功能;#define 是宏定义,是预编译的部分,其发生在编译之前,只是简单地进行字符串的替换,不进行类型检查。

(4)作用域不同

typedef 有作用域限定,#define 不受作用域约束,只要是在 #define声明后的引用都是正确的。

【注意】typedef 定义是语句,因为句尾要加上分号,而 #define 不是语句,千万不能在句尾加分号

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,代码片段似乎不完整,而且缺少一些关键的部分。但是,我可以为您提供一些有关图的基本知识和一些代码实现的建议。 在代码片段中,似乎定义了一个邻接矩阵的结构体,其中adj表示边的权重,info表示边的其他信息。此外,还定义了一个枚举类型graphkind_hc,表示图的类型(有向图、有向网、无向图、无向网)。 在这个基础上,可以定义一个图的结构体,包含顶点数组、边数组(邻接矩阵或邻接表)、顶点数、边数、图的类型等信息。 例如,可以定义一个邻接矩阵表示的有向图的结构体如下: ``` typedef struct { int vex[MAX_VERTEX_NUM]; arccell_hc arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int vexnum,arcnum; graphkind_hc kind; }MGraph; ``` 其中,vex是顶点数组,arcs是邻接矩阵,vexnum表示顶点数,arcnum表示边数,kind表示图的类型。 接下来,可以实现一些基本的图操作函数,如创建图、遍历图、查找图中的路径等。 例如,下面是一个创建有向图的函数: ``` void CreateDG(MGraph *G) { int i,j,k,w; printf("请输入顶点数和边数:"); scanf("%d%d",&G->vexnum,&G->arcnum); printf("请输入顶点信息:"); for(i=0;i<G->vexnum;i++) { scanf("%d",&G->vex[i]); } for(i=0;i<G->vexnum;i++) { for(j=0;j<G->vexnum;j++) { G->arcs[i][j].adj=INFINITY; G->arcs[i][j].info=NULL; } } printf("请输入边信息:"); for(k=0;k<G->arcnum;k++) { printf("请输入第%d条边的起点、终点和权重:",k+1); scanf("%d%d%d",&i,&j,&w); G->arcs[i][j].adj=w; } G->kind=DG; } ``` 该函数首先从用户输入中获取顶点数和边数,然后依次输入顶点信息和边信息,并构建邻接矩阵表示的有向图。 接下来是一个深度优先遍历的函数: ``` void DFS(MGraph G,int v,visited_hc *visited) { int i; visited[v]=TRUE; printf("%d ",G.vex[v]); for(i=0;i<G.vexnum;i++) { if(G.arcs[v][i].adj!=INFINITY && !visited[i]) { DFS(G,i,visited); } } } ``` 该函数从指定顶点v开始,依次遍历与之相邻的未访问过的顶点,直到所有顶点都被访问过。 类似地,可以实现广度优先遍历、查找图中的最短路径等操作。以此类推,可以根据具体的需求来实现更多的图操作函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值