当前位置:文档之家› 结构体嵌套使用

结构体嵌套使用

结构体嵌套使用
结构体嵌套使用

结构体嵌套使用

(以下的例子中,每个结构体、联合,都可以换成结构体联合、或者类)

一.结构体的声明与定义变量的方法

1.常规方法

struct AA

{

int a;

int b;

}

此时定义变量可以AA aa; 调用成员aa.a; aa.b;

2.也可以现在结构体尾部定义一个或者几个变量。

struct CC

{

int a;

int b;

}x1,x2;

此时x1,x2就是已经定义好的CC类型的变量了,这种情况在声明时

struct前就一定不能加typedef,如果加上了,x1,x2就成了和CC一样的结构体类型了,而不是变量了。

3.无名结构体,指的是此结构体在声明是没有写名字的情况。

这时如果结构体不是子结构体,那么就必须定义一个变量,用第二种方法。否则此结构体无意义了。

如果此结构体是子结构体,那么此结构体可以定义变量,也可以不定义。如果不定义变量,那么它的成员就会被当成父结构体的直接成员,直接调用。如果定义变量,那么就要通过两级调用才能调用这个结构图的成员。

4. 用typedef 的情况。这种情况,定义变量必须在结构体声明之后定义。

使用typedef可以在结构体外部顺便定义此结构体的别名,指针类型,二级指针类型,数组类型等等。

typedef struct _ABC

{

int a;

int b;

}ABC,*pABC,ABC_ARRY[20];

注意和第二种情况的区别,一个是实例,一个是类型。

二.结构体嵌套使用方法

1.可以先把子结构体在父结构体之外声明,然后就在父结构体内部把

子结构体当成一个普通类型来使用就可以了,不过此时子结构体必须有名字(order就是名字,8月3号,。niu)。这样的好处就是可以在父结构体内部定义多个子结构体类型的成员变量。

这时调用子结构体的变量就得通过两级调用了。即aa.order.first; struct ORDER

{

BYTE first;

BYTE second;

BYTE third;

BYTE forth;

}bb;

union OpcondOrder

{

DWORD data;

ORDER order;

}aa;

2.把子结构体在父结构体内部定义的情况。

a. 如果内部定义的子结构体没有名字,那么定义完父结构体后,就把子结构体的成员当成父结构体的第一级成员(直接成员)来调用就行了。此时子结构体不能定义变量。

union OPCODEORDER

{

DWORD data;

struct //没有名字不能定义变量,8月3号,niu

{

BYTE forth;

BYTE third;

BYTE second;

BYTE first;

}; //没有变量

}aa;

这时就可这样调用:aa.first;aa.second; 直接当成自己的一级成员来用。//这时这个结构体没有意义

如果此时作为子结构体的无名结构体定义了变量,那么就需要二级调用才能够调用无名结构体的成员。

union OPCODEORDER

{

DWORD data;

struct{

BYTE fort

h;

BYTE third;

BYTE second;

BYTE first;

}cc;

}aa;

这时调用就需要:https://www.doczj.com/doc/a118551553.html,.first;https://www.doczj.com/doc/a118551553.html,.second;当成父结构体的二级成员调用。

b. 对于内部定义的结构体有名字的情况,如果此有名子结构体没有定义变量,那么在调用的时候,就要通过二级调用,而且第二级调用要用类作用有区分符(::),否则会报错。

union OPCODEORDER

{

DWORD data;

struct ORDER{ //有名字,就要类作用区分符,'::',靠,没有用过啊,8月3号,niu

BYTE forth;

BYTE third;

BYTE second;

BYTE first;

};

}aa;

此时就得这样调用aa.ORDER::first;aa.ORDER::second;aa.ORDER::third; 如果有名字的结构体定义了变量,那么调用时也是通过两种二级调用,此时就是普通的二级调用了和用类作用有区分符(::),就兼容了第一种情况的调用方法和上面的这种方法。

union OPCODEORDER

{

DWORD data;

struct ORDER{

BYTE forth;

BYTE third;

BYTE second;

BYTE first;

}cc;

}aa;

第一种调用方法https://www.doczj.com/doc/a118551553.html,.first;https://www.doczj.com/doc/a118551553.html,.second;

第二种调用方法aa.ORDER::first; aa.ORDER::second;

结构体的使用方法

下面介绍了结构体的创建和使用方法: 创建过程: 定义一个名字为addr_t的结构体,其内容为名位addr的数组,数组大小为NET_ADDR_SIZE。 typedef struct { addr_t *addr;//地址 u8 *msg;//信息 u8 len;//信息长度 u8 port;//端口 } ioctlRawSend_t;//发送信息结构体 定义一个名字为ioctlRawSend_t的结构体,其内容为一个结构体,一个无符号类型指针和两个无符号数。将内容中的结构体代入这个结构体类型中,其内容可以写成(这样写只是为了看得更清晰) typedef struct { u8 addr[NET_ADDR_SIZE];//地址 u8 *msg;//信息 u8 len;//信息长度 u8 port;//端口 } ioctlRawSend_t;//发送信息结构体 这是一个联合体(共用体),很好理解,就是把两个结构体成员(ioctlRawSend_t,ioctlRawReceive_t)放在了一起用同一个名字(ioctl_info)表示,成员占用相同的内存单元,其中内容同步变化。 从变量观察窗口我们可以看到变量是如何组织在一起的。

到现在就从最基础的数组组成了一个联合体,下面我们使用它。 下面的语句中显示了如何向刚才建立的联合体中写要求的数据。 下面进行逐句分析 第一行中写广播地址(具体数字可以认为变动,一般为{0xFF,0xFF,0xFF,0xFF})到联合体中的 发送地址中。下面是变量窗口中发生的变化(红色表示变化)。

接下来的一句为向信息中填充内容,下面是变量观察窗口的变化。其中msg只显示0号元素,是因为它是一个指针,指向的是首地址,其实其他的内容也已经变化。

结构体的定义及初始化

?结构体类型定义 struct [结构体名] { 类型标识符成员名; 类型标识符成员名; ……………. };成员类型可以是基本型或构造型 struct是关键字,不能省略合法标识符 可省:无名结构体 结构体的说明及结构体变量的定义

例struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; name num sex age score addr 2字节 2字节 20字节 1字节 4字节 30字节 … ….. 结构体类型定义描述结构 的组织形式,不分配内存 例子图解

?结构体类型定义 struct [结构体名] { 类型标识符成员名; 类型标识符成员名; ……………. };成员类型可以是基本型或构造型 struct是关键字,不能省略合法标识符 可省:无名结构体 结构体的说明及结构体变量的定义

(1) 在结构体说明的同时定义结构体变量,例如:struct example { char *name; int age; }guo,zhang;(2)直接定义结构体变量,例如: struct {char *name; int age; }guo,zhang 未给 出结 构体 名 (3) 把定义和说明分开,例如:struct example { char *name; int age; }; struct example guo,zhang;结构体变量占用内存的大小可用sizeof()运算来求出 ?结构体变量的定义

结构体的说明及结构体变量的定义?变量说明形式 struct 结构体名结构体变量名; ?注意: 结构变量的存储类型概念、它的寿命、可见 性及使用范围与普通变量、数组等完全一致。 结构体变量说明必须在结构类型定义之后, 二者也可同时进行。

c语言结构体用法(转载)

C语言,结构体(struct) 用法 结构(struct) 结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。 结构中可以使用不同的数据类型。 1. 结构说明和结构变量定义 在T urbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此, 象其它 类型的变量一样, 在使用结构变量时要先对其定义。 定义结构变量的一般格式为: struct 结构名 { 类型变量名; 类型变量名; ... } 结构变量; 结构名是结构的标识符不是变量名。 类型为第二节中所讲述的五种数据类型(整型、浮点型、字符型、指针型和 无值型)。 构成结构的每一个类型变量称为结构成员, 它象数组的元素一样, 但数组中 元素是以下标来访问的, 而结构是按变量名字来访问成员的。

下面举一个例子来说明怎样定义结构变量。 struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; } person; 这个例子定义了一个结构名为string的结构变量person, 如果省略变量名 person, 则变成对结构的说明。用已说明的结构名也可定义结构变量。这样定义 时上例变成: struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; }; struct string person; 如果需要定义多个具有相同形式的结构变量时用这种方法比较方便, 它先作 结构说明, 再用结构名来定义变量。 例如: struct string T ianyr, Liuqi, ...; 如果省略结构名, 则称之为无名结构, 这种情况常常出现在函数内部, 用这 种结构时前面的例子变成:

(完整版)matlab中使用结构体汇总

matlab中使用结构体 结构(struct)数组 要在MALTAB中实现比较复杂的编程,就不能不用struct类型。而且在MATLAB中实现struct比C中更为方便。 4. 3.1 结构数组的创建 MATLAB提供了两种定义结构的方式:直接应用和使用struct函数。 1. 使用直接引用方式定义结构 与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。比如建立一个复数变量x: x.real = 0; % 创建字段名为real,并为该字段赋值为0 x.imag = 0 % 为x创建一个新的字段imag,并为该字段赋值为0 x = real: 0 imag: 0 然后可以将旗动态扩充为数组: x(2).real = 0; % 将x扩充为1×2的结构数组 x(2).imag = 0; 在任何需要的时候,也可以为数组动态扩充字段,如增加字段scale:x(1).scale = 0;

这样,所有x都增加了一个scale字段,而x(1)之外的其他变量的scale字段为空: x(1) % 查看结构数组的第一个元素的各个字段的内容 ans = real: 0 imag: 0 scale: 0 x(2) % 查看结构数组的第二个元素的各个字段的内容,注意没有赋值的字段为空 ans = real: 0 imag: 0 scale: [] 应该注意的是,x的real、imag、scale字段不一定是单个数据元素,它们可以是任意数据类型,可以是向量、数组、矩阵甚至是其他结构变量或元胞数组,而且不同字段之间其数据类型不需要相同。例如: clear x; x.real = [1 2 3 4 5]; x.imag = ones(10,10); 数组中不同元素的同一字段的数据类型也不要求一样: x(2).real = '123'; x(2).imag = rand(5,1);

C语言-基础教程-结构体类型变量的定义和引用

C语言-基础教程-结构体类型变量的定义和引用 前面的课程我们学习了一些简单数据类型(整型、实型、字符型)的定义和应用,还学习了数组(一维、二维)的定义和应用,这些数据类型的特点是:当定义某一特定数据类型,就限定该类型变量的存储特性和取值范围。对简单数据类型来说,既可以定义单个的变量,也可以定义数组。而数组的全部元素都具有相同的数据类型,或者说是相同数据类型的一个集合。 在日常生活中,我们常会遇到一些需要填写的登记表,如住宿表、成绩表、通讯地址等。 在这些表中,填写的数据是不能用同一种数据类型描述的,在住宿表中我们通常会登记上姓名、性别、身份证号码等项目;在通讯地址表中我们会写下姓名、邮编、邮箱地址、电话号码、E - m a i l等项目。这些表中集合了各种数据,无法用前面学过的任一种数据类型完全描述,因此C引入一种能集中不同数据类型于一体的数据类型-结构体类型。结构体类型的变量可以拥有不同数据类型的成员,是不同数据类型成员的集合。 在上面描述的各种登记表中,让我们仔细观察一下住宿表、成绩表、通讯地址等。 住宿表由下面的项目构成: 这些登记表用C提供的结构体类型描述如下: 住宿表: suct accommod { char name[20]; / *姓名* / char sex; / *性别* / char job[40]; / *职业* / int age; / *年龄* / long number; / *身份证号码* / } ; 成绩表: suct score

{ char grade[20]; / * 班级* / long number; / * 学号* / char name[20]; / *姓名* / float os; / *操作系统* / float datasu; / * 数据结构* / float compnet; / * 计算机网络* / } ; 通讯地址表: suct addr { char name[20]; char department[30];/ * 部门* / char address[30]; / *住址* / long box; / * 邮编* / long phone; / * 电话号码* / char email[30]; / * E m a i l * / };

C语言结构体(struct)常见使用方法

C语言结构体(struct)常见使用方法 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。 结构体定义: 第一种:只有结构体定义 [cpp]view plain copy 1.struct stuff{ 2.char job[20]; 3.int age; 4.float height; 5.}; 第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义 [cpp]view plain copy 1.//直接带变量名Huqinwei 2.struct stuff{ 3.char job[20]; 4.int age; 5.float height; 6.}Huqinwei; 也许初期看不习惯容易困惑,其实这就相当于: [cpp]view plain copy 1.struct stuff{ 2.char job[20]; 3.int age;

4.float height; 5.}; 6.struct stuff Huqinwei; 第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用 [cpp]view plain copy 1.struct stuff yourname; 去定义第二个变量。 那么,附加变量初始化的结构体定义还可进一步简化出第三种: [cpp]view plain copy 1.struct{ 2.char job[20]; 3.int age; 4.float height; 5.}Huqinwei; 把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。 结构体变量及其内部成员变量的定义及访问: 绕口吧?要分清结构体变量和结构体内部成员变量的概念。 就像刚才的第二种提到的,结构体变量的声明可以用: [cpp]view plain copy 1.struct stuff yourname; 其成员变量的定义可以随声明进行: [cpp]view plain copy 1.struct stuff Huqinwei = {"manager",30,185}; 也可以考虑结构体之间的赋值: [cpp]view plain copy

C语言结构体习题及答案

第9章结构体 1.定义以下结构体类型 struct s { int a; char b; float f; }; 则语句printf("%d",sizeof(struct s))的输出结果为【】。 A) 3 B) 7 C) 6 D) 4 2.当定义一个结构体变量时,系统为它分配的内存空间是【】 A)结构中一个成员所需的内存容量 B)结构中第一个成员所需的内存容量 C)结构体中占内存容量最大者所需的容量 D)结构中各成员所需内存容量之和 3.定义以下结构体类型 struct s { int x; float f; }a[3]; 语句printf("%d",sizeof(a))的输出结果为【】 A) 4 B) 12 C) 18 D) 6 4.定义以下结构体数组 struct c { int x; int y; }s[2]={1,3,2,7}; 语句printf("%d",s[0].x*s[1].x)的输出结果为【】 A) 14 B) 6 C) 2 D) 21 5.运行下列程序段,输出结果是【】 struct country { int num; char name[10]; }x[5]={1,"China",2,"USA",3,"France",4, "England",5, "Spanish"}; struct country *p; p=x+2; printf("%d,%c",p->num,(*p).name[2]); A) 3,a B) 4,g C) 2,U D) 5,S

6.下面程序的运行结果是【】。 struct KeyWord { char Key[20]; int ID; }kw[]={"void",1,"char",2,"int",3,"float",4,"double",5}; main() { printf("%c,%d\n",kw[3].Key[0], kw[3].ID); } A) i,3 B) n,3 C) f,4 D) l,4 7.定义以下结构体类型 struct student { char name[10]; int score[50]; float average; }stud1; 则stud1占用内存的字节数是【】。 A) 64 B) 114 C) 228 D) 7 8.如果有下面的定义和赋值,则使用【】不可以输出n中data的值。struct SNode { unsigned id; int data; }n,*p; p=&n; A) p.data B) n.data C) p->data D) (*p).data 9.根据下面的定义,能输出Mary的语句是【】。 struct person { char name[9]; int age; }; struct person class[5]={"John",17,"Paul",19,"Mary",18,"Adam",16}; A) printf("%s\n",class[1].name); B) printf("%s\n",class[2].name); C) printf("%s\n",class[3].name);

c语言中struct的用法

c语言中struct的用法 c语言中struct的用法的用法如下:基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。 结构体定义:第一种:只有结构体定义[cpp] view plain copy 在CODE上查看代码片派生到我的代码片01.struct stuff{02. char job[20];03. int age;04. float height;05.};第二种:附加该结构体类型的“结构体变量的初始化的结构体定义[cpp] view plain copy 在CODE 上查看代码片派生到我的代码片01.//直接带变量名Huqinwei02.struct stuff{03. char job[20];04. int age;05. float height;06.}Huqinwei;也许初期看不习惯容易困惑,其实这就相当于:[cpp] view plain copy 在CODE上查看代码片派生到我的代码片01.struct stuff{02. char job[20];03. int age;04. float height;05.};06.struct stuff Huqinwei;第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用[cpp] view plain copy 在CODE上查看代码片派生到我的代码片01.struct stuff yourname;去定义第二个变量。 结构体变量及其内部成员变量的定义及访问:绕口吧?要分清结构体变量和结构体内部成员变量的概念。 就像刚才的第二种提到的,结构体变量的声明可以用:[cpp] view plain copy 在CODE上查看代码片派生到我的代码片01.struct stuff

(1)定义结构体的关键字是

(1) 定义结构体的关键字是,定义共用体的关键字是。 (2) 结构体和共用体的相同点是,不同点是。 (3) 若有以下定义和语句,则sizeof(a)的值是__ ___,而sizeof(b)的值是__ _。struct tu { int m; char n; int y;}a; struct { float p, char q; struct tu r} b; (4) 设有下面结构类型说明和变量定义,则变量a在内存所占字节数是。如果将该结构改成共用体,结果为。 struct stud { char num[6]; int s[4]; double ave; } a; (5) 下面程序用来输出结构体变量ex所占存储单元的字节数,请填空。 struct st { char name[20]; double score; }; main() { struct st ex ; printf("ex size: %d\n",sizeof( )); } (6) 下面定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。 struct node { int info; link; } (7) 以下程序执行后输出结果是。 main() { union { unsigned int n; unsigned char c; } u1; u1.c='A'; printf("%c\n",u1.n); } (8) 变量root如图所示的存储结构,其中sp是指向字符串的指针域,next是指向该结构的指针域,data用以存放整型数。请填空,完成此结构的类型说明和变量root的定义。 root struct { char *sp ; __ __; _ _; } root; 2. 阅读下面的程序,写出程序结果 (1) struct info { char a,b,c;}; main() { struct info s[2]={{‘a’,‘b’,‘c’},{‘d’,‘e’,‘f’}};int t; t=(s[0].b-s[1].a)+(s[1].c-s[0].b); printf("%d\n",t); } (2)

结构体在函数中的应用

结构体在函数中的应用 前天在编写一段代码时突然对结构体在函数中的用法有些模糊了,经过复习,基本弄清了这些知识,特总结如下: 一、结构体与函数参数 结构体作函数参数可分为传值与传指针。 1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数。在这种情况下,由于涉及到结构体参数的拷贝,程序空间及时间效率都会受到影响,所以这种方法基本不用。 例如: 2.传指针时直接将结构体的首地址传递给函数体,在函数体中通过指针引用结构体成员,可以对结构体参数成员的值造成实际影响。这种用法效率高,经常采用。 例如: 二、结构体与函数返回值 对于某些版本的C语言编译器,返回值仅能为基本数据类型如int、char以及指针,因此结构体作为一种组合数据类型,不能以值的方式返回,而在有些版本的C编译器中又可以直接返回结构体变量,在C++中也是可以直接返回结构体变量的。 直接返回结构体变量示例如下;

以指针方式返回结构体示例如下: 关于结构体,看内核又遇到了,关于赋值中存在·的奇怪用法,在网上没有找到答案,却把以前一直弄的比较模糊的对齐问题给翻出来了。如下为转发内容: 齐原则总结:(在没有#pragma pack宏的情况下): 原则1:数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。 原则2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部

二级C语言结构体定义及应用部分练习题(十三)(精)

(1)有以下程序段 typedef struct NODE { int num; struct NODE *next; } OLD; 以下叙述中正确的是C A)以上的说明形式非法 B)NODE是一个结构体类型 C)OLD是一个结构体类型 D)OLD是一个结构体变量(2)若有以下说明和定义union dt { int a; char b; double c; }data; 以下叙述中错误的是 C A)data的每个成员起始地址都相同 B)变量data所占内存字节数与成员c所占字节数相等 C)程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000 D)data可以作为函数的实参(3)设有如下说明 typedef struct ST { long a; int b; char c[2]; } NEW; 则下面叙述中正确的是 C A)以上的说明形式非法 B)ST是一个结构体类型 C)NEW是一个结构体类型 D)NEW是一个结构体变量(4)以下对结构体类型变量td的定义中,错误的是 C A)typedef struct aa { int n; float m; }AA; AA td; B)struct aa { int n; float m; } td; struct aa td; C)struct { int n; float m; }aa; struct aa td; D)struct { int n; float m; }td; (5)设有以下语句 typedef struct S { int g; char h;} T; 则下面叙述中正确的是B A)可用S定义结构体变量 B)可以用T定义结构体变量 C)S是struct类型的变量 D)T是struct S类型的变量(6)设有如下说明 typedef struct { int n; char c; double x;}STD; 则以下选项中,能正确定义结构体数组并赋初值的语句是B A)STD tt[2]={{1,'A',62},{2, 'B',75}}; B) STD tt[2]={1,"A",62},2, "B",75}; C) struct tt[2]={{1,'A'},{2, 'B'}}; D)structtt[2]={{1,"A",62.5},{2, "B",75.0}}; (7)设有以下说明语句 typedef struct { int n; char ch[8]; }PER; 则下面叙述中正确的是B A) PER 是结构体变量名 B) PER是结构体类型名 C) typedef struct 是结构体类型 D)struct 是结构体类型名(8)设有以下说明语句 struct ex { int x ; float y; char z ;} example; 则下面的叙述中不正确的是B A) struct结构体类型的关键字 B)example是结构体类型名 C) x,y,z都是结构体成员名 D) struct ex是结构体类型(9)有如下定义 struct person{char name[9]; int age;}; strict person class[10]={“Johu”, 17, “Paul”, 19 “Mary”, 18, “Adam 16,}; 根据上述定义,能输出字母M的语句是D A) prinft(“%c\n”,class[ 3].mane); B) pfintf(“%c\n”,class[3].name[1]); C) prinft (“%c\n”,class[2].n ame[1]); D) printf(“%^c\n”,class[2].name[0]); (10)变量a

C语言结构体习题及答案备课讲稿

C语言结构体习题及 答案

第9章结构体 1.定义以下结构体类型 struct s { int a; char b; float f; }; 则语句printf("%d",sizeof(struct s))的输出结果为【】。 A) 3 B) 7 C) 6 D) 4 2.当定义一个结构体变量时,系统为它分配的内存空间是【】 A)结构中一个成员所需的内存容量 B)结构中第一个成员所需的内存容量 C)结构体中占内存容量最大者所需的容量 D)结构中各成员所需内存容量之和 3.定义以下结构体类型 struct s { int x; float f; }a[3]; 语句printf("%d",sizeof(a))的输出结果为【】 A) 4 B) 12 C) 18 D) 6 4.定义以下结构体数组 struct c { int x; int y; }s[2]={1,3,2,7}; 语句printf("%d",s[0].x*s[1].x)的输出结果为【】 A) 14 B) 6 C) 2 D) 21 收集于网络,如有侵权请联系管理员删除

5.运行下列程序段,输出结果是【】 struct country { int num; char name[10]; }x[5]={1,"China",2,"USA",3,"France",4, "England",5, "Spanish"}; struct country *p; p=x+2; printf("%d,%c",p->num,(*p).name[2]); A) 3,a B) 4,g C) 2,U D) 5,S 6.下面程序的运行结果是【】。 struct KeyWord { char Key[20]; int ID; }kw[]={"void",1,"char",2,"int",3,"float",4,"double",5}; main() { printf("%c,%d\n",kw[3].Key[0], kw[3].ID); } A) i,3 B) n,3 C) f,4 D) l,4 7.定义以下结构体类型 struct student { char name[10]; int score[50]; float average; }stud1; 则stud1占用内存的字节数是【】。 A) 64 B) 114 C) 228 D) 7 8.如果有下面的定义和赋值,则使用【】不可以输出n中data的值。 struct SNode { unsigned id; int data; }n,*p; p=&n; A) p.data B) n.data C) p->data D) (*p).data 9.根据下面的定义,能输出Mary的语句是【】。 收集于网络,如有侵权请联系管理员删除

实验4 C++中结构体的使用方法

实验4 C++中结构体的使用方法 一、实验目的: ●掌握C++中结构体的声明和定义方法; ●掌握结构体中成员的定义和调用方法; ●注意区分在C语言和C++中结构体的变化。 二、实验内容 1、用结构体表示一个复数,编写实现复数的加法、乘法、输入和输出的函 数,并测试这些函数,在主函数中定义结构体变量,并调用以上函数进行运算。 ●加法规则:( a + bi ) + (c + di) = (a+c) + (b+d)i ●乘法规则:( a + bi ) * (c + di) = ( ac – bd ) +( bc + ad)i ●输入规则:分别输入实部和虚部 ●输出规则:如果a为实部,b为虚部,则输出样式为:( a , b ) 2、分析以下程序的运行结果,运行程序验证结果,并简要说明为什么得到这 个结果? #include using namespace std; int main() { typedef char String[10] ; typedef int zheng; String name; zheng n; cout<<"sizeof( name ) "<< sizeof( name)<

return 0; } 3、n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。 设计并编写程序,实现如下功能: (1)要求由用户输入开始时的猴子数n、报数的最后一个数m。 (2)给出当选猴王的初始编号。 提示:1)建立一个标志数组,元素个数与猴子个数相同,初始化为0,代表所对应的猴子没有出局,当数到某个猴子时,将对应标志位改为1,下次数到该元素时,不统计在内。2)计数方法:当数到数组最后一个元素时,计数变量再变为0,即又从第一个元素开始,从而形成一个逻辑上的环。 提示:使用结构体和动态链表,用户输入猴子个数后,建立基于结构体的链表。 4、编写函数Midpoint(p1,p2),返回有点p1和p2构成线段的中点,函数的参数和返回值都是point类型,point的定义如下: struct point{ double x , y ; };

实验13结构体的定义、引用与赋初值(精)

实验13 结构体的定义、引用与赋初值 一、实验目的 1.掌握结构体类型和结构体类型变量的定义方法。 2.掌握结构体类型变量成赋值员赋值和引用方法。 3.学会使用结构体数组。 二、实验要求 1.通过阅读和编写程序,掌握结构体类型和结构体类型变量的定义方法。 2.通过阅读和编写程序,掌握结构体类型变量成赋值员赋值和引用方法。 3.通过阅读和编写程序,学会使用结构体数组,以及用结构体类型变量作为函数参数。 三、实验内容 1.阅读程序,指出程序的功能,并写出运行结果。 main () { struct people { char name[11]; int age; }; int i ,j; struct people pe[10]; for ( i=1 ; i<=10; i++ ) { printf ( “ %s %d” ,pe[i] , &pe[i].age ); scanf ( “ %s %d” ,pe[i] , pe[i].age ); } printf (“ Enter a number in range 1----10\n” ); scanf (“ %d ” , &j); printf (“ The %dth person : %s , %d \n ” , j, pe[j].name ,pe[j].age ); } 问: (1)本程序的功能是什么? (2)请自己设计一组数据并输入,写出输出结果。 2 . 设有10个学生,每个学生包括学号、姓名、三门课的成绩。求每个学生的总成绩并输出总分为最高的学生的各门课的成绩及总分。 struct student { int num; char name [10] ; int score [3];

结构体定义 typedef struct 用法详解和用法小结

结构体定义 typedef struct 用法详解和用法小结 typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。 具体区别在于: 若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n; 若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n; 区别就在于使用时,是否可以省去struct这个关键字。 第三篇:struct和typedef struct 分三块来讲述: 1 首先: 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1; 如果没有typedef就必须用struct Student stu1;来声明 这里的Stu实际上就是struct Student的别名。 另外这里也可以不写Student(于是也不能struct Student stu1;了) typedef struct { int a; }Stu; 但在c++里很简单,直接 struct Student { int a; }; 于是就定义了结构体类型Student,声明变量时直接Student stu2; =========================================== 2其次: 在c++中如果用typedef的话,又会造成区别: struct Student { int a; }stu1;//stu1是一个变量 typedef struct Student2 { int a; }stu2;//stu2是一个结构体类型

C结构体应用全攻略

C结构体应用全攻略——入门、进阶、提高、扩展 在学习结构体之前,你会很自然的想到使用如下的变量来描述: name, height, weight, strong, modfile。 好了,现在来给Kula和K分别进行描述,你就需要在变量名上加以区分。对于Kula你有了 Kula_name, Kula_height, Kula_weight, Kula_strong, Kula_modfile 对于K,你有了 K_name, K_height, K_weight, K_strong, K_modfile 好,设想你现在要制作KOF2003了,我们需要一个函数根据这些信息在战斗中评价两位选手,这个函数看上去像是这样 int value(char *name, int height, int weight, int strong, char *modfile); 当然在实际测试中一个人物的信息可能不止这几个,也许他有30个之多,我相信你是不会写一个有30个参数的函数的(除非你为Microsoft工作)。更糟糕的是,如果由于版本更新发现30个参数里有15个是多余的,在修改了函数定义之后,你还要修改无数的不只位置函数调用。汗! 现在,结构体来救你了(e文:the struct comes to rescue)。看看如何用结构体定义一个拳皇人物吧。首先我们定义一个结构体类型: struct FIGHTER { char *name; /*元素1*/ int height; /*元素2*/ int weight; /*元素3*/ int strong; /*元素4*/ char *modfile; /*元素5*/

C知识点总结结构体指针使用

位操作:熟悉& | ^ << >>操作。应聘嵌入式C开发的岗位会考这方面的知识。见实验5。 结构体共用体 如前面讲的,作为函数参数和返回值,结构体是值传递。结构体变量之间可以直接赋值,结构体在初始化时才能整体赋值。 C99里新的结构体初始化方法。初始化结构体的指定成员变量。见《C primer plus》P382 struct book{char a; int b; double c }; struct book surprise ={ .b=3 };即初始化指定的成员变量b,其他成员变量的值赋值为0。在内核驱动代码中会经常见到。 指向结构体的指针及使用 struct node { int data; struct node *next; } node1; struct node *point=&node1; 内存模型 高地址Array [ point ] ----- > node1 此时,point指向node1。即*point和node1对应的是同一块内存。 (*point).data等价于node1.data对应的是同一块内存。 (*point).next等价于node1.next对应的是同一块内存。即黄色背景的内存。 point->next 为什么这段代码行得通: int offset= &( ( (struct book*) 0 )->b); //获得成员变量b在结构体的偏移量。 等价于:struct book *ptr=NULL; int offset= & ( ptr->b) ; // &(*ptr).b ; 编译器维护关于每个结构类型的信息,指示每个字段的字节偏移。它以这些偏移作为存储器引用指令中的移位,从而产生对结构元素的引用的代码。结构体的各个字段的选取完全是在编译时处理的。参考《深入理解》P166页中的一个例子。 程序对内存的访问,都是先生成该内存的地址,再访问该内存。 结构体对齐,及填充 结构体的对齐与填充 C语言标准未严格规定该如何对齐,不同系统的对齐策略略有不同。

picc结构体用法

?什么是结构体? 简单的来说,结构体就是个能包含不同数据类型的一个结构,他是一种能自己定义的数据类型,他的特点和数组主要有两点不同,首先结构体能在一个结构中声明不同的数据类型,第二相同结构的结构体变量是能相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,他本身不是数据类型(而结构体是),数组名称是常量指针,所以不能做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。 定义结构体使用struct修饰符,例如: C++ 代码 struct test { float a; int b; }; ? 上面的代码就定义了一个名为test的结构体,他的数据类型就是test,他包含两个成员a 和b,成员a的数据类型为浮点型,成员b的数据类型为整型。 由于结构体本身就是自定义的数据类型,定义结构体变量的方法和定义普通变量的方法相同。 test pn1; 这样就定义了一test结构体数据类型的结构体变量pn1,结构体成员的访问通过点操作符进行, pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作, 注意:结构体生命的时候本身不占用所有内存空间,只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存。

结构体,同样是能定义指针的,那么结构体指针就叫做结构指针。 结构指针通过->符号来访问成员,下面我们就以上所说的看一个完整的例子:C++ 代码 #include #include usingnamespacestd; structtest//定义一个名为test的结构体 { inta;//定义结构体成员a intb;//定义结构体成员b }; voidmain() { testpn1;//定义结构体变量pn1 testpn2;//定义结构体变量pn2 pn2.a=10;//通过成员操作符.给结构体变量pn2中的成员a赋值 pn2.b=3;//通过成员操作符.给结构体变量pn2中的成员b赋值 pn1=pn2;//把pn2中所有的成员值复制给具有相同结构的结构体变量pn1 cout<a=99;//通过结构指针修改结构体变量pn2成员a的值 cout<a<<"|"<b<

C语言结构体struct用法

C语言,结构体(struct) 用法 在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。显然不能用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。它相当于其它高级语言中的记录。 “结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构既是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样 1. 结构说明和结构变量定义 在使用结构变量时要先对其定义。 1> struct 结构名 { 类型成员名; 类型成员名; ... } ; 2> struct 结构名 { 类型成员名; 类型成员名; ... } 结构变量名; 3>. struct 结构名 { 类型成员名; 类型成员名; ... } ; Struct 结构名结构变量名; 4> struct 结构名 { 类型成员名; 类型成员名; struct 结构名 { 类型成员名; 类型成员名; ... } 结构变量名; ... } 结构变量名; //可以是1>类型的,也可以是2>类型的嵌套

5> struct { 类型成员名; 类型成员名; ... } 结构变量名; //这种无结构名的,常常出现在函数内部,此时,结构变量名必须与结构一起方可。 结构变量名表既可以是变量,也可以是数组。可以直接对变量名表赋值,赋值时,一个变量用一个大括号表示,变量成员括在大括号之内,各变量名间用逗号隔开。 查看变量名下的成员内容,就相当于一个二维的变量,具体格式为:结构变量名+ 点+成员名,给单个成员名赋值也一样。 用指针应用结构体变量中的各成员。形式为: 结构指针名->成员名相当于(*结构指针名). 成员名//圆括号不能省 也相当于结构变量名 . 成员名 例如: Struct student *p=&stu; //stu为结构变量名 或者:Struct student *p; p=stu; 类型为五种数据类型(整型、浮点型、字符型、指针型和无值型)。 下面举一个例子来说明怎样定义结构变量。 struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; } person; 这个例子定义了一个结构名为string的结构变量person, 如果省略变量名 person, 则变成对结构的说明。用已说明的结构名也可定义结构变量。这样定义 时上例变成: struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; }; struct string person; 如果需要定义多个具有相同形式的结构变量时用这种方法比较方便, 它先作结构说明, 再用结构名来定义变量。当只有结构说明时,也可以在函数应用时再利用结构名定义变量。 例如: struct string Tianyr, Liuqi, ...;

相关主题
文本预览
相关文档 最新文档