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

本文详细解释了C语言中的typedefstruct与struct的区别,并通过代码示例展示了它们的使用方式和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值