基本概念
typedef与结构体
typedef与数组
-------------------------------------
typedef是c语言中的关键字,作用是将一个数据类型定义为一个新的数据类型
包括内部类型(int,char,float等),和用户自定义类型(如struct等类型)。
------------------------------------
编程中使用typedef的目的:一是给变量一个易记,意义明确的新名字,二是简
话一些复杂的声明。
例如:typedef int INTEGER;
typedef Number_count num;
------------------------------------
typedef与结构体
//----------线性表的单链存储结构---------//
typedef struct Lnode
{
int date;
struct LNode *next;
}LNode,*LinkList ;
以上的定义可以分为两步形成:
第一步:
定义结构体:
struct LNode
{
int data;
struct LNoe *next ;
};
第二步:
利用typedef定义别名:
typedef struct LNode LNode ;
typedef struct LNode *LinkList ;
//LinkList是结构体指针的名称
为什么定义的名称要相同?(typedef struct LNode LNode )
请看下面下面定义:
typedef struct LNode
{
int data ;
struct LNode *next ;
}SqList ;
即:typedef struct LNode SqList ;
比较:
LNode La,Lb; ---------->应改为:struct LNode La,Lb;
SqList La, Lb; ----------->应改为:struct LNode La,Lb;
定义一个指向结构体的指针
//很明显之前定义的LinkList是一个指向结构体的指针
typedef struct LNode
{
int data ;
struct LNode *next ;
}LNode,*Linklist1,**LinkList2;
//以上就是将结构体struct LNode 命名为LNode,可以用LNode直接定义结构体或声明结构体变量;
//将struct LNode*命名为LinkList1;
//将struct LNode**命名为LinkList2;
typedef与数组
------------------------------------
区分下面几组定义
typedef int Datatype;
typedef Datatype ARR1[4];
typedef ARR1 ARR2[4];
--------------------------------------
分析下面的程序:
#include<stdio.h>
typedef int Datatype;
typedef Datatype ARR1[4];
typedef ARR1 ARR2[4];
int main(){
int i;
Datatype j;
ARR1 a;
ARR2 b;
for(i=0)
a[i]=2*(i+1);
printf("a is type of ARR1,a=");
for(i=0;i<4;i++)
printf("%-3d",a[i]);
printf("b is type of ARR1,b=");
for(i=0;i<4;i|++)
for(j=0;j<4;j++)
b[i][j]=i+j+2;
for(i=0;i<4;i|++)
{
for(j=0;j<4;j++)
printf("%-3d",b[i][j]]);
printf("\n");
}
return 0;
}
运行结果:
a is type of ARR1,a=2 4 6 8
b is type of ARR2,b=
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
由上可知ARR1是一个一维数组,ARR2是一个二维数组。
以上程序说明:
typedef int Datatype;
//将Datatype 定义为基本类型int,方便扩充
typedef Datatype ARR1[4];
//定义一个一维数组,数组的值为整形
//等价于 typedef int ARR1[4]
typedef ARR1 ARR2[4];
//定义一个二维数组,数组的值为ARR1型,不过ARR1型又是一个数组
所以ARR2实际上是个数组,等价于 typedef int ARR2[4][4];
类似的可以作如下推广:
typedef ARR2 ARR3[4];
//等价于定义一个三维数组:typedef int ARR3[4][4][4];