type struct 和struct的区别

1、用Typedef 定义类型

除了可以直接使用C提供的标准类型名(如int char float等)和自己声明的结构体等类型外,还可以用typedef声明新的类型名来代替已有的类型名。
习惯上常把typedef声明的类型名用大写字母表示,以便与系统提供的标准类型标识符相区别

1、typedef int INTEGER;
typedef float REAL;
如果一个程序中,一个整形变量用来计数,可以
typedef int COUNT;
COUNT i,j;
2、可以声明结构体类型

typedef struct
{
    int month;
    int day;
    int year;
}DATE;

声明新类型名DATE,它代表上面指定的一个结构体类型。这时,就可以用DATE定义变量:
DATE brithday;
DATE * p;
3、还可以进一步:
1)、typedef int NUM[100];
NUM n;
声明NUM为整形数组类型,定义n为整形数组变量;
2)、typedef char * STRING;
STRING p,s[10];
声明STRING为字符指针类型
3)、typedef int (* POINTER)( )
声明POINTER为指向函数的指针类型,该函数返回整型值;

1】注意#define是在预编译时处理的,它只能作简单的字符串替换,而typedef 是在编译时处理的。实际上它并不是作简单的字符串替换。

2】当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用#include命令把它们包含进来。

3】使用typedef有利于程序的通用和移植。有时程序会依赖硬件特性,用typedef便于移植。例如,有的计算机系统int型数据用两个字节、数据范围为-32768~32767,而另外一些机器则以4个字节存放一个整数,数值范围为+-21亿。如果把一个C程序从一个以4个字节存放整数的计算机系统移植到以2个字节存放整数的系统,按一般方法需要将定义变量中的每个int改为long。例如,将“int a,b,c;”改为“long a,b,c;”,如果程序中有多处用int 定义变量,则要改动多处。现在用一个INTEGER 来声明int:
typedef int INTEGER;
在程序中所有整型变量都用INTEGER定义。在移植时只需改动typedef定义体即可:
typedef long INTEGER;

2、struct和typedef struct

  普通结构体声明时使用只struct关键字,而链表需要typedef struct,比较疑惑他们之间的区别
  
(1) 在C中定义一个结构体类型要用typedef:

typedef struct Student  
{  
     int a;  
}Stu;  

则声明变量是这种形式:Stu stu1;
如果没有typedef就必须用struct Student stu1;来声明。Stu实际上就是struct Student的别名。
另外这里也可以不写Student

typedef struct  
{  
     int a;  
}Stu;  

则声明形式必须是Stu stu1;
2)在c++中定义一个结构体类型:

struct Student  
{  
     int a;  
}; 

于是就定义了结构体类型Student,声明变量时直接Student stu2

typedef struct Student2  
{  
int a;  
}stu1;//stu1是一个结构体类型  
struct Student  
{  
int a;  
}stu2;//stu2是一个变量  

注意带typedef关键字,其就为类型,不带就为变量
还应该注意的是,C++为了C程序员的习惯,保留了Struct关键字,但是其意义与Class相同,唯一的区别是Struct默认成员权限为public。

3) 链表的声明

//方式1
typedef struct ListNode  
{  
 DataType data;  
 struct ListNode *next;  
}Node,*LinkList;  


//方式2
struct ListNode
{
DataType data;  
struct ListNode *next;  
};  
typedef struct ListNode Node;    
typedef Node *Linklist;          

//方式3
 typedef struct ListNode {     
   DataType data;  
   struct ListNode *next;  
}Node;  
typedef Node *LinkList;  

因为都有typedef关键字,所以后面声明的都是类型。其中Node与LinkList本质是一样的,只不过一个是Node类型结构体,一个是指向Node的指针。但是理解时LinkList应该是高层次的意义,即一个链表。

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值