c语言结构体中包含结构体,一个结构体里面包含了另一个结构体该怎样赋值

1,一个结构体里面包含了另一个结构体该怎样赋值Record r[N] = 改为:Record r[N] = 后面每一条记录的数据都这样改就可以了结构体嵌套用大括号括起来 如:其实楼主应该把出错信息也贴出来的KeyType、MAX、N都没有定义 , 定义了就通过了……
2,结构体中能包括结构体吗可以?。?这样的就是结构体数组 。例如:struct stuchar name[20];long number;};main()##########################################################struct stu stud[4]; / * 定义结构体数组* /stud[0].name="ZhangSan";stud[0].number=100123;}结构体,在c++中,是一个类而已 。所以,不管是类 , 还是结构体,它产生的对象名,其实是可以与成员同名的 。所以a是错的 。而b和c , 因为编译器根本不会为结构体分配内存,而只是为结构体变量分配内存 。例如:struct studentint num;int age;char sex;}void main()cout<
3,结构体的C语言中的结构体在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类 。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构 。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member) , 且这些成员可以为不同的类型,成员一般用名字访问 。结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量 。struct tag 结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等 。//此结构体的声明包含了其他的结构体struct COMPLEX在实际项目中 , 结构体是大量存在的 。研发人员常使用结构体来封装一些属性来组成新的类型 。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算 。结构体在函数中的作用不是简便,其最主要的作用就是封装 。封装的好处就是可以再次利用 。让使用者不必关心这个是什么,只要根据定义使用就可以了 。结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便 。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效 , 这就是内存对齐的由来 。每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数) 。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数” 。规则:1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行 。2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行 。3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候 , 这个n值的大小将不产生任何效果 。【c语言结构体中包含结构体,一个结构体里面包含了另一个结构体该怎样赋值】
4 , C中结构体中包含结构体数组怎么定义structbint id;a[] suba;};程序调用时:采用 b ab; ab.suba=new a[10];的方式 。但是不推荐这样用,可以用类去代替struct ;注:结构体内的变量最好加public 关键词 。即:struct bstruct apublic int start;public int end;}struct bpublic int id;public a[] suba;}static void Main(string[] args)b newb;newb.id = 1;newb.suba = new a[10];newb.suba[0].start = 1;newb.suba[0].end = 2;newb.suba[1].start = 3;newb.suba[1].end = 4;Console.WriteLine("Console.Read();}结果输出1,2,3,4可能是字节对齐吧,你这样试试[structlayout(layoutkind.auto, charset = charset.auto, pack = 1)]C#结构体定义的情况:C#结构体定义也可以象类一样可以单独定义.class astruct aC#结构体定义也可以在名字前面加入控制访问符.public struct studentinternal struct student如果结构体student没有publice或者internal的声明 类program就无法使用student结构定义 obj对象,如果结构体student的元素没有public的声明 , 对象obj就无法调用元素x因为默认的结构体名和元素名是private类型C#结构体定义之程序:using System; public struct student public int x; }; class program public static void Main() student obj=new student(); obj.x=100; } }; 在结构体中也可以定义静态成员与类中一样,使用时必须用类名,或结构名来调用不属于实例,声明时直接定义.C#结构体定义程序:using System; public struct student public static int a = 10; }; class exe public static void Main() Console.WriteLine( student.a = 100); } }; 或using System; class base public struct student public static int a = 10; }; } class exe public static void Main() Console.WriteLine( base.student.a = 100); } }; 在结构体中可以定义构造函数以初始化成员,但不可以重写默认无参构造函数和默认无参析构函数C#结构体定义程序:public struct student public int x; public int y; public static int z; public student(int a,int b,int c) x=a; y=b; student.z=c; } }; 在结构体中可以定义成员函数 。C#结构体定义程序:public struct student public void list() Console.WriteLine("这是构造的函数"); } }; 结构体的对象使用new运算符创建(obj)也可以直接创建单个元素赋值(obj2)这是与类不同的因为类只能使用new创建对象C#结构体定义程序:public struct student public int x; public int y; public static int z; public student(int a,int b,int c) x=a; y=b; student.z=c; } }; class program public static void Main() student obj=new student(100,200,300); student obj2; obj2.x=100; obj2.y=200; student.z=300; } } 在使用类对象和函数使用时,使用的是引用传递 , 所以字段改变在使用结构对象和函数使用时,是用的是值传递,所以字段没有改变C#结构体定义程序:using System; class class_wsy public int x; } struct struct_wsy public int x; } class program public static void class_t(class_wsy obj) obj.x = 90; } public static void struct_t(struct_wsy obj) obj.x = 90; } public static void Main() class_wsy obj_1 = new class_wsy(); struct_wsy obj_2 = new struct_wsy(); obj_1.x = 100; obj_2.x = 100; class_t(obj_1); struct_t(obj_2);Console.WriteLine("class_wsy obj_1.x=Console.Read(); } } C#结构体定义程序运行结果为:class_wsy obj_1.x=90 struct_wsy obj_2.x=100

    推荐阅读