C++基础---typedef struct与struct的区别

来源:互联网 发布:linux killproc 编辑:程序博客网 时间:2024/05/17 06:15

1.typedef struct与struct的区别

1.1 typedef的概念

  • typedef:为C语言的关键字,作用是为一种数据类型定义一个新名字(这里的数据类型包括基础数据类型和复合数据类型)。
  • 在编程中使用typedef的目的:一是给变量一个易记且意义明确的新名字,二是简化一些比较复杂的类型声明。

1.2 typedef struct的代码示例

  • 示例代码一:

    #include <iostream>#include <string>using namespace std;typedef struct Student{    string name;    string gradenum;    string classnum;    int number;}*student;//定义了一个指向Student结构体别名student的指针,代表所有指向这个结构的指针,使用前必须为其创建空间。int main(){    //student s1;//错误,编译通过,运行时出错,由于对象指针未被初始化即没有创建空间。    student s1 = new Student;//正确,为对象指针分配创建内存空间,编译通过,运行通过。    s1->name = "Mini";    s1->gradenum = "一年级";    s1->classnum = "一班";    s1->number = 1;    cout<<"姓名:"<<s1->name<<"\t"<<"年级:"<<s1->gradenum<<"\t"        "班级:"<<s1->classnum<<"\t"<<"学号:"<<s1->number<<endl;    delete s1;//在堆中创建的空间,必须要释放掉。    s1 = 0;//将指向释放后空间的指针置为空指针。    system("pause");    return 0;}=>姓名:Mini 年级:一年级 班级:一班 学号:1
  • 示例代码二:

    #include <iostream>#include <string>using namespace std;typedef struct Student{    string name;    string gradenum;    string classnum;    int number;}&student;//定义了一个Student结构体别名student的别名,别名必须得到初始化。int main(){    //student s1;//错误,编译不通过,error C2530: “s1”: 必须初始化引用。    Student s;//构造结构体Student的对象,用于初始化别名对象引用。    student s1 = s;//正确,初始化对象引用,编译通过,运行通过。    s1.name = "Mini";    s1.gradenum = "一年级";    s1.classnum = "一班";    s1.number = 1;    cout<<"姓名:"<<s1.name<<"\t"<<"年级:"<<s1.gradenum<<"\t"        "班级:"<<s1.classnum<<"\t"<<"学号:"<<s1.number<<endl;    system("pause");    return 0;}=>姓名:Mini 年级:一年级 班级:一班 学号:1
  • 示例代码三:

    #include <iostream>#include <string>using namespace std;typedef struct Student{    string name;    string gradenum;    string classnum;    int number;}student;//定义了一个Student结构体别名student。int main(){    student s1;//正确,编译通过,运行通过。    s1.name = "Mini";    s1.gradenum = "一年级";    s1.classnum = "一班";    s1.number = 1;    cout<<"姓名:"<<s1.name<<"\t"<<"年级:"<<s1.gradenum<<"\t"        "班级:"<<s1.classnum<<"\t"<<"学号:"<<s1.number<<endl;    system("pause");    return 0;}=>姓名:Mini 年级:一年级 班级:一班 学号:1
  • 示例代码四:

    #include <iostream>#include <string>using namespace std;typedef struct Student{    string name;    string gradenum;    string classnum;    int number;    Student *next;}*student;int main(){    Student s1, s2, s3, *p;    s1.name = "Mini1"; s1.gradenum = "一年级"; s1.classnum = "一班"; s1.number = 1;     s2.name = "Mini2"; s2.gradenum = "二年级"; s2.classnum = "二班"; s2.number = 2;     s3.name = "Mini3"; s3.gradenum = "三年级"; s3.classnum = "三班"; s3.number = 3;     student head = new Student;    head = &s1;//将s1变量结构的开始地址作为一个结点赋给头指针head    s1.next = &s2;//将s2变量结构的开始地址作为一个结点赋给x变量结构的next指针成员    s2.next = &s3;//将s3变量结构的开始地址作为一个结点赋给y变量结构的next指针成员    s3.next = NULL;//将s3变量结构的next指针成员赋为空,即表示该结点是个尾结点    p = head;//将p指针指向头结点head    while(p)    {        cout<<"姓名:"<<p->name<<"\t"<<"年级:"<<p->gradenum<<"\t"        "班级:"<<p->classnum<<"\t"<<"学号:"<<p->number<<endl;        p = p->next;    }    system("pause");    return 0;}=>姓名:Mini1 年级:一年级 班级:一班 学号:1  姓名:Mini2 年级:二年级 班级:二班 学号:2  姓名:Mini3 年级:三年级 班级:三班 学号:3

1.3 struct的代码示例

  • 示例代码一:

    #include <iostream>#include <string>using namespace std;struct Student{    string name;    string gradenum;    string classnum;    int number;}*student;//定义了一个指向Student结构体的对象指针student,使用前必须为其创建空间。int main(){    student = new Student;    student->name = "Mini";    student->gradenum = "一年级";    student->classnum = "一班";    student->number = 1;    cout<<"姓名:"<<student->name<<"\t"<<"年级:"<<student->gradenum<<"\t"        "班级:"<<student->classnum<<"\t"<<"学号:"<<student->number<<endl;    delete student;//在堆中创建的空间,必须要释放掉。    student = 0;//将指向释放后空间的指针置为空指针。    system("pause");    return 0;}=>姓名:Mini 年级:一年级 班级:一班 学号:1
  • 示例代码二:

    #include <iostream>#include <string>using namespace std;struct Student{    string name;    string gradenum;    string classnum;    int number;};int main(){    Student s;//构造结构体Student的对象,用于初始化别名对象引用。    Student &student = s;//正确,//定义了一个Student结构体的别名student,别名必须得到初始化。    student.name = "Mini";    student.gradenum = "一年级";    student.classnum = "一班";    student.number = 1;    cout<<"姓名:"<<student.name<<"\t"<<"年级:"<<student.gradenum<<"\t"        "班级:"<<student.classnum<<"\t"<<"学号:"<<student.number<<endl;    system("pause");    return 0;}=>姓名:Mini 年级:一年级 班级:一班 学号:1
  • 示例代码三:

    #include <iostream>#include <string>using namespace std;struct Student{    string name;    string gradenum;    string classnum;    int number;}student;//定义了一个Student结构体别名student。int main(){    student.name = "Mini";    student.gradenum = "一年级";    student.classnum = "一班";    student.number = 1;    cout<<"姓名:"<<student.name<<"\t"<<"年级:"<<student.gradenum<<"\t"        "班级:"<<student.classnum<<"\t"<<"学号:"<<student.number<<endl;    system("pause");    return 0;}=>姓名:Mini 年级:一年级 班级:一班 学号:1
  • 示例代码四:

    #include <iostream>#include <string>using namespace std;struct Student{    string name;    string gradenum;    string classnum;    int number;    Student *next;}*head;int main(){    Student s1, s2, s3, *p;    s1.name = "Mini1"; s1.gradenum = "一年级"; s1.classnum = "一班"; s1.number = 1;     s2.name = "Mini2"; s2.gradenum = "二年级"; s2.classnum = "二班"; s2.number = 2;     s3.name = "Mini3"; s3.gradenum = "三年级"; s3.classnum = "三班"; s3.number = 3;     head = new Student;    head = &s1;//将s1变量结构的开始地址作为一个结点赋给头指针head    s1.next = &s2;//将s2变量结构的开始地址作为一个结点赋给x变量结构的next指针成员    s2.next = &s3;//将s3变量结构的开始地址作为一个结点赋给y变量结构的next指针成员    s3.next = NULL;//将s3变量结构的next指针成员赋为空,即表示该结点是个尾结点    p = head;//将p指针指向头结点head    while(p)    {        cout<<"姓名:"<<p->name<<"\t"<<"年级:"<<p->gradenum<<"\t"        "班级:"<<p->classnum<<"\t"<<"学号:"<<p->number<<endl;        p = p->next;    }    system("pause");    return 0;}=>姓名:Mini1 年级:一年级 班级:一班 学号:1  姓名:Mini2 年级:二年级 班级:二班 学号:2  姓名:Mini3 年级:三年级 班级:三班 学号:3

参考文献:
[1] 百度搜索关键字:typedef struct与struct的区别

0 0
原创粉丝点击