c++中,经常有一些莫名的数据类型,不像java等,数据类型都是明明白白写出来的,比如 int long char等等。然而c++,可以对数据类型进行重命名,这样,你就可以自己命名你需要的数据类型了。最简单的例子
int main()
{
typedef int alias;
alias i = 100;
cout << i << endl;
return 0;
}
这样,就把大家熟知的int类型变为了只有自己知道的alias类型了,是不是很简单而且很灵活?之所以可以自定义数据类型,是因为c++有指针的存在,指针多了可能让数据类型名字变得冗长,很难操作。所以用别名轻松搞定。例如
int main()
{
int a = 88;
int*b;
b = &a;
int **c;
c = &b;
typedef int *** s;
s d;
d = &c;
cout << ***d << endl;
return 0;
}
这样,把int*** 类型重命名为s,再用s声明一个d,给d赋值,同时打印出***d,结果输出88.
同时,typedef 还可以重命名函数指针类型。如下
int add(int a,int b)//声明函数
int (*p)(int ,int)//定义一个函数指针
p=add;//赋值函数指针
typedef void (*Callback)(int,const char *)//重命名函数指针类型
Callback cb=add;
如上面代码展示,如果不使用typedef,那么只能用来定义一个函数指针。如果使用typedef ,你可以使用typedef 关键字重命名的类型,去定义函数指针变量,是不是很方便?
在这里补充一下声明与定义的区别,对于函数,很明显可以区分开声明与定义,即没有方法体({}大括号就是方法体)的,我们可以理解为声明,有方法体的,我们可以理解为定义。然而变量的声明定义,却没有分那么详细
extern int a;//声明
int a;//声明定义,但未初始化
一般情况下,只有加extern的才算是声明,其他的都算是定义。