typedef
typedef为一个已有的类型定义一个新的名字
typedef 类型 新名字
typedef int feel
//这会告诉编译器feel是int的另一个名称
#include <iostream>
using namespace std;
int main () {
typedef int feel;
feel a = 10;
printf("%d", a);
}
3 typedef与#define
两者的区别如下:
#define进行简单的进行字符串替换。
#define宏定义可以使用#ifdef、#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
typedef是为一个类型起新名字。
typedef符合(C语言)范围规则,使用typedef定义的变量类型,其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。通常,使用typedef要比使用#define要好,特别是在有指针的场合里。
1 首先:
在C中定义一个结构体类型要用typedef:
typedef struct Student
{
int a;
}Stu;
于是在声明变量的时候就可:Stu stu1;
如果没有typedef就必须用struct Student stu1;来声明
这里的Stu实际上就是struct Student的别名。
另外这里也可以不写Student(于是也不能struct Student stu1;了)
typedef struct
{
int a;
}Stu;
但在c++里很简单,直接
struct Student
{
int a;
};
如果我们想声明一个含5个int元素的一维数组,一般会这么写:int a[5];
如果我们想声明多个含5个int元素的一维数组,一般会这么写:int a1[5], a2[5], a3[5]···,或者 a[N][5]
可见,对于定义多个一维数组,写起来略显复杂,这时,我们就应该把数组定义为一个类型,例如:
typedef int arr_t[5];//定义了一个数组类型arr_t,该类型的变量是个数组。
typedef int arr_t[5];
int main(void)
{
arr_t d; //d是个数组,这一行等价于: int d[5];
arr_t b1, b2, b3;//b1, b2, b3都是数组
d[0] = 1;
d[1] = 2;
d[4] = 134;
d[5] = 253;//编译警告:下标越界
}
Typedef 与 #define宏的区别
首先,在举例子之前,先回顾一个小知识:
int* a,b;//在这里,不符合我们的意图,它只声明了一个指向整型的指针a和
//一个整型变量b
typedef int* PINT;
PINT a,b ;//此时,a,b都为指向整型的指针变量
相比起宏定义的直接替换,typedef是对类型的封装
#define PINT int*
PINT b,c;//相当于 int* b,c;只有b为指针,c为整型变量