typedef关键字用于给已有的数据类型指定一个新的名称。实际上,typedef创建一个同义词,例如
typedef int integer;
将integer作为int的同义词,你就可以如下定义整形变量integer count;
注意:typedef并不创建新的数据类型,只是让你能够将不同的名称用于一个预定义的数据类型,最常用于聚集数据类型(structure)
结构
定义的3种范例
1. struct SSN{
int first_three;
char dash1;
int second_two;
char dash2;
int last_four;
};
struct SSN customer_ssn;
2. struct date{
char month[2];
char day[2];
chat year[4];
}current_date;
3. struct time{
int hours;
int minutes;
int seconds;
} time_of_birth = {8,45,0};
指向结构的指针(顺便解释.和->两种运算符的用法和区别)
定义一种结构
struct part
{
short number;
char name[10];
};
然后声明一个指向part结构的指针: struct part *p_part; (*叫间接运算符)
这时候还不能初始化这个指针,因为还没有声明一个结构类型变量。
struct part gizmo;
现在指针就有东西可指了。
p_part=&gizmo; 此语句将gizmo的地址赋给p_part,此时p_part这个指针就指向了gizmo这个结构变量所在内存的第一个字节。
我们已经知道了p_part是指向gizmo的指针,那么该如何使用呢?
法一:
我们知道如果ptr是一个指向数据对象的指针,那么通过间接运算符*运算之后的 *ptr就是所指的对象。
那么*p_part显然就是gizmo,而我们知道可以用结构成员运算符(.)来访问结构的成员变量。
理所当然(*p_part).number=100;就是一种合理的访问方式。 注意优先级!!!
法二:
另外一种通过结构指针来存取结构成员的一种方法是使用间接运算符(->)
p_part->number=100;就是合法的。
所以有三种存取结构成员的方式:
1.通过结构名 str.member
2.通过指向结构的指针和间接运算符(*) (*ptr).member
3.通过指向结构的指针和间接运算符(->) ptr->member
至此我们也可以类推到类成员的访问,定义类的两种方式我之前总结过,下面以一段很简单的代码说明问题:
//#include <stdio.h>
#include <cstdlib>
#include <iostream>
using namespace std;
class obj
{
private:
short no;
char* content;
public:
obj()
{
no=0;
content="this is object";
}
obj(short number,char* msg)
{
no=number;
content=msg;
}
void printMsg()
{
cout<<no<<":"<<content<<endl;
};
};
int main()
{
obj o;
obj o1(1,"this is object 1");
obj* o2;
o2=new obj(2,"this is object 2");
o.printMsg();
o1.printMsg();
(*o2).printMsg();
o2->printMsg();
system("pause");
return 1;
}
用typedef给结构创建别名
可以使用关键字typedef给结构或者共用体类型创建别名,例如
typedef struct{
int x;
int y;
}coord;
然后便能使用标识符coord来声明这种结构的实例,使代码变得简洁。
注意,此时coord不是该结构的名称,而用
struct coord{
int x;
int y;
};这时coord是结构体的名称,但是声明一个结构变量时必须使用struct关键字。