精华内容
下载资源
问答
  • 描述结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量...

    描述

    结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。

    在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

    eec932574b8360d4ad26d6bee30db06d.png

    结构体定义

    677ec417514d36453c7270e108019fed.png

    结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。

    struct tag {

    member-list

    } variable-list ;

    在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。以下为示例:

    //此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c

    //同时又声明了结构体变量s1

    //这个结构体并没有标明其标签

    struct {

    int a;

    char b;

    double c;

    } s1;

    //同上声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c

    //结构体的标签被命名为SIMPLE,没有声明变量

    struct SIMPLE{

    int a;

    char b;

    double c;

    };

    //用SIMPLE标签的结构体,另外声明了变量t1、t2、t3

    struct SIMPLE t1, t2[20], *t3;

    //也可以用typedef创建新类型

    typedef struct{

    int a;

    char b;

    double c;

    } Simple2;

    //现在可以用Simple2作为类型声明新的结构体变量

    Simple2 u1, u2[20], *u3;

    在上面的声明中,第一个和第二声明被编译器当作两个完全不同的类型,即使他们的成员列表是一样的,如果令t3=&s1,则是非法的。

    定义结构变量的方法

    1、先定义结构,再说明结构变量。

    例如:

    structstu

    {

    int num;

    char name[20];

    int age;

    };

    struct stu boy1,boy2;

    说明了两个变量boy1和boy2为stu结构类型。

    也可以用宏定义使一个符号常量来表示一个结构类型, 例如:

    #define STU struct stu

    STU

    {

    int num;

    char name[20];

    int age;

    };

    STU boy1,boy2;

    2、在定义结构类型的同时说明结构变量。

    例如:

    struct stu

    {

    int num;

    char name[20];

    int age;

    }boy1,boy2;

    3、直接说明结构变量。

    例如:

    struct

    {

    int num;

    char name[20];

    int age;

    }boy1,boy2;

    第三种方法与第二种方法的区别在于第三种方法中省去了结构名,而直接给出结构变量。

    说明了boy1,boy2变量为stu类型后,即可向这两个变量中的各个成员赋值。

    在上述stu结构定义中,所有的成员都是基本数据类型或数组类型。成员也可以又是一个结构, 即构成了嵌套的结构。

    使用结构变量成员的一般形式是:

    结构变量名。成员名

    例如:

    boy1.num

    /*即第一个人的学号 */

    如果成员本身又是一个结构则必须逐级找到最低级的成员才能使用。

    例如:boy1.birthday.month

    即第一个人出生的月份成员可以在程序中单独使用,与普通变量完全相同。

    结构体初始化

    fd0ffb73d104545baaf9686bb8987e08.png

    1、结构体的构造函数中初始化

    在C++中,结构体与类在使用上已没有本质上的区别了,所以可以使用构造函数来初始化。如下代码所示:

    struct Stu

    {

    int nNum;

    bool bSex;

    char szName[20];

    char szEmail[100];

    //构造函数初始化

    Stu()

    {

    nNum = 0;

    bSex = false;

    memset(szName,0,sizeof(szName));

    memset(szEmail,0,sizeof(szEmail));

    }

    };

    你可能已经发现了,如果结构体中有大量成员,一个个赋值,相当麻烦。那么你可以这样写:

    struct Stu

    {

    int nNum;

    bool bSex;

    char szName[20];

    char szEmail[100];

    //构造函数初始化

    Stu()

    {

    memset(this,0,sizeof(Stu));

    //或者是下面的格式

    //memset(&nNum,0,sizeof(Stu));

    }

    };

    如果在结构体中分配了指针,并且指针指向一个堆内存,那么就在析构函数中释放。以上便是在构造函数中初始化。

    2、继承模板类初始化。

    首先定义一个模板基类:

    template 《typename T》

    class ZeroStruct

    {

    public:

    ZeroStruct()

    {

    memset(this,0,sizeof(T));

    }

    };

    之后定义的结构体都继承于此模板类。

    struct Stu:ZeroStruct《Stu》

    {

    int nNum;

    bool bSex;

    char szName[20];

    char szEmail[100];

    };

    这样也能实现初始化。

    3、定义时初始化。

    struct Stu

    {

    int nNum;

    bool bSex;

    char szName[20];

    char szEmail[100];

    };

    //定义时初始化

    Stu stu1 = {0};

    在有的结构体中,第一个成员表示结构体的大小,那么就可以这样初始化:

    struct Stu

    {

    int nSize; //结构体大小

    int nNum;

    bool bSex;

    char szName[20];

    char szEmail[100];

    };

    Stu stu1 = {sizeof(Stu),0};

    后面的0,可以省略掉,直接写成:Stu stu1 = {sizeof(Stu)};后面自动会用0填充。

    关于结构体的类型要注意的几点:

    (1)类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。

    (2)对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于同类型的普通变量。

    (3)结构体的成员也可以是一个结构体变量。

    结构变量的赋值

    你可对结构体变量的成员逐个赋值,这种方式和数组相像,数组就是逐个元素逐一赋值(对于数组,除非初始化,否则你别无选择,只能这样赋值)。不同于数组,标准C中结构体变量可以整体赋值。

    例一:

    #include 《stdio.h》

    int main(void)

    {

    struct student

    {

    long int num;

    int age;

    char* name;

    }st1={200,18,“zhangsan”};

    struct student st2,st3;

    printf(“ NO. age name /n”);

    printf(“ %ld %d %s/n”,st1.num,st1.age,st1.name);

    getch();

    st2.num=199;

    st2.age=19;

    st2.name=“lisi”;

    printf(“ %ld %d %s/n”,st2.num,st2.age,st2.name);

    getch();

    st3=st2;

    printf(“ %ld %d %s/n”,st3.num,st3.age,st3.name);

    getch();

    printf(“/n/n struct student:%d”,sizeof(struct student));

    getch();

    return 0;

    }

    例二:

    #include 《stdio.h》

    #include 《conio.h》

    struct birth

    {

    int year;

    int month;

    int day;

    };

    struct student

    {

    long int num;

    struct birth birthday;

    char* name;

    }st1={200,{1988,8,8},“zhangsan”};

    int main(void)

    {

    struct student st2;

    st2=st1;

    printf(“ %ld %s %d/n”,st2.num,st2.name,sizeof(int));

    printf(“ year: %d month: %d month: %d/n”,

    st2.birthday.year,

    st2.birthday.month,

    st2.birthday.day);

    getch();

    return 0;

    }

    注意

    当你的结构体变量中有存放多个字符的成员,建议你将它定义为数组(比如前面的姓名成员,不知道数组该开辟多大时,也可以定义为指针)。原因是指针变量不能存放实际数据,仅仅是地址。

    打开APP阅读更多精彩内容

    点击阅读全文

    展开全文
  • 1.结构的定义和使用 #include #include #include using namespace std; struct Date { int month; int day; int year; }; struct Student { int num; char name[20]; char sex; Date birthday; float score; }...

    1.结构的定义和使用

    #include
    #include
    #include
    using namespace std;
    struct Date
    {
    int month;
    int day;
    int year;
    };

    struct Student
    {
    int num;
    char name[20];
    char sex;
    Date birthday;
    float score;
    }student1, student2 = { 10002,“Wang Li”,‘f’,5,23,1992,89.5 };
    int main(void)
    {
    student1 = student2;
    cout << student1.num << endl;
    cout << student2.name << endl;
    cout << student1.sex << endl;
    cout << student1.birthday.month << student1.birthday.day<<student1.birthday.year<<endl;
    return 0;
    }

    2.new和delete的使用

    #include
    #include
    #include
    using namespace std;

    struct Student
    {
    string name;
    int num;
    char sex;
    };

    int main(void)
    {
    Student *p;
    p = new Student;//用New开辟一个结构体的内存空间
    p->name = “Wang Fang”;
    p->num = 10123;
    p->sex = ‘m’;
    cout << p->name << endl << p->num << endl << p->sex << endl;
    delete p;
    return 0;

    }

    展开全文
  • C语言的基本数据类型对于描述较多的信息比较麻烦,自定义一种数据类型来满足我们的需要,这就是结构体指针,自己定义的数据类型。比如我们做一个学生管理系统(最近在做这个),对学生的描述要有姓名,年龄,学号,...
    C语言的基本数据类型对于描述较多的信息比较麻烦,自定义一种数据类型来满足我们的需要,这就是结构体指针,自己定义的数据类型。比如我们做一个学生管理系统(最近在做这个),对学生的描述要有姓名,年龄,学号,成绩等等。怎样将这些用一种类型表示呢?
    
    struct 结构体名{成员列表};

    结构体名就是你自定义这个类型的名字,成员列表就是你需要这些变量的类型(类型 成员名)。比如

    struct student {
    char name[10];
    int age;
    int num;
    float score;};

    大括号后面要有分号
    定义结构体变量要注意 struct必须加上。例如:

    struct student student1;//定义一个名为student1的结构体变量
    struct student student1,stedent2;//定义两个结构体变量

    在定义结构体时声明变量

    struct student {
    char name[10];
    int age;
    int num;
    float score;}student1,student2;

    对结构体变量的初始化:

    struct student student1={.age=20};

    这里的“.age”代表结构体变量中的成员student1.age 。其它未指定的初值为相对应 类型的0,(数值型为0,指针型为NULL)。结构体变量对成员的访问用 “.” 来进行。

    student1.age=20;

    同类型的可以互相赋值。

    展开全文
  • C语言结构体定义赋值举例

    千次阅读 2012-03-22 19:51:17
    结构体是一种特殊的数据类型,它可以将很多数据类型打包,然后只要操作该结构体的指针变量便可以轻松的访问该结构体内其他的数据。 举例如下: struct student { CHAR NAME[8];...如果定义 struct

    结构体是一种特殊的数据类型,它可以将很多数据类型打包,然后只要操作该结构体的指针变量便可以轻松的访问该结构体内其他的数据。

    举例如下:

    struct student

    {

    CHAR NAME[8];

    int age;

    CHAR depart[20];

    float grade;

    }freshman ;

    student是结构名,大括号内为该结构体打包的数据类型。如果定义 struct student *p=freshman.NAME,则引用变量p可以指向结构体*p的存储空间首地址。

    ①成员运算符“.”运行级别高于“*”,所以*p.NAME表示*(p.NAME)。

    ②定义结构体要在末尾加“;”。

    例:简单的机构体赋值和应用

    #include <stdio.h>

    int main()

    {   //定义一个结构体a;

    struct student

    {     

    CHAR NAME[8];

    int age;

    CHAR sex[4];

    CHAR depart[20];

    float grade1,grade2,grade3;

    }a;

    printf("\nNAME:");      //输入结构体a中的成员NAME,接着打印到终端

    scanf("%s", a.NAME);    此处引用的方式是:结构体变量.成员名

    printf("\n%s\n",a.NAME);

    return 0;

    }

    例:定义结构体数组,调用结构体内数据

    结构体数组的成员有三种访问方式:

    ①结构体变量.成员名

    ②(*结构体指针变量).成员名

    ③结构体指针变量->成员

    #include <stdio.h>

    struct stu     //定义结构体数组及结构体的初始化

    {

    int num;

    CHAR *NAME;

    CHAR sex;

    float score;

    }pupil[5]={

    {101,"Tom",'M',45.8},

    {102,"Mike",'M',62.5},

    {103,"Chris",'F',92.5},

    {104,"Rose",'F',87.6},

    {105,"Nate",'M',58.8}

    };

    void avg(struct stu *ps)   //声明无返回值的函数avg,定义其参数是一个结构体指针变量。

    {

    int c=0,i;       //定义两个整型c,i;

    float ave,s=0;   //定义两个浮点型变量ave,s

    for(i=0;i<5;i++,ps++)              // i表示循环的次数 

    {

    s+=ps->score;              //s表示学生成绩的和

    if(ps->score<60) c+=1;     //c表示不及格的学生数数目

    }

    printf("s=%.3f\n",s);                //打印学生成绩的和

    ave=s/5;                            //ave计算学生的平均成绩

    printf("average=%.3f\ncount=%d\n",ave,c);

    }

    int main()

    {

    struct stu *ps;     //定义结构体变量*ps         目的是在内存空间中取一个连续的栈空间,大小是sizeof( struct stu),并将内存的首地址赋值给ps

    ps=pupil;           //将pupil的地址赋值给ps       将ps的指向定位到具体的结构体数据头处,即给*ps赋值操作,将数据连续写入内存的栈空间中  

    avg(ps);            //将ps赋值,调用函数avg

    return 0;           //返回mian函数开始执行处

    }

    结构体指针变量做函数参数的好处:直接减少压栈次数,效率比多次压栈效率高,调用方便。


    (2012-03-22,文章来源:http://pda.c114.net/501/a472968.html


    展开全文
  • 三种方式视情况而定,看自己喜欢哪一种 #include <iostream> #include <... //第一种 直接定义变量 struct student one; one.name = "张三"; one.score = 99; cout << "姓名:" <&l
  • 设计程序,最重要的步骤之一是选择表示数据...1、结构体定义 struct book { char title[40]; //书名 char author[40]; //作者 float price; //单价 }; 在结构体声明中,用一对花括号括起来的是结构成...
  • 结构体定义:第一种:只有结构体定义structstuff{charjob[20];intage;floatheight;};第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义//直接带变量名Huqinweistructstuff{charjob[20];intage;...
  • 结构体定义 /* type 类型名 struct{ 字段名 字段类型 字段名 字段类型 字段名 字段类型 ... } */ type person struct { //main包里的person类型 结构体为person类型分类 name string age int //没有给它们...
  • c语言 结构体数组的赋值 //**创建结构体** #include<stdio.h> struct Class{ int id; char name[10]; }; //******结构体数组的赋值 int main(){ int m; //定义结构体数组的长度所需变量 int i; printf(...
  • 今天小编就为大家分享一篇关于C语言结构体数组同时赋值的另类用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • c语言结构体可以直接赋值

    千次阅读 2018-12-12 15:52:58
    c语言结构体可以直接赋值 结构体直接赋值的实现 下面是一个实例: #include &amp;lt;stdio.h&amp;gt; struct Foo { char a; int b; double c; }foo1, foo2; //define two structs with three...
  • 结构体定义以及其赋值和使用

    千次阅读 2014-04-30 15:17:46
    //结构体赋值不一定全部赋值,但是后面用到的理所当然要必须赋值 //需求导向供给 struct AFX_EXT_CLASS SKDCommunicationData  { BOOL m_bSucc; BOOL m_bFirst; SDataInfo m_dataInfo; //结构体 SKDCo
  • 结构体定义赋值

    万次阅读 2018-08-07 21:47:19
    1.结构体的一般形式为:    struct 结构体名  {  数据类型 成员名1;...2.结构体定义赋值 1》先定义结构体类型再定义变量名,这是C语言中定义结构体类型变量最常见的方式。  struct 结构体名  {  ...
  • 今天梳理下golang中结构体赋值、指针以及获取成员变量方式
  • 1、结构体比较和赋值 (同类型的结构体可以相互赋值) 示例: package main //必须有个main包 import "fmt" //定义一个结构体类型 type Student struct { id int name string sex byte //字符类型 ...
  • 程序中用DATA定义的局部变量,也可以使用types 语法: DATA: BEGIN OF <name> <field1>... <field2>... END OF<name>. 例子: DATA:BEGIN OF USERINF, SID(10) TYPE C, NAME(20) TYPE ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 105,990
精华内容 42,396
关键字:

结构体定义时赋值