结构体类型定义
定义方式1:
Typedef struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
} *LinkList;
定义方式2:
struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
};
Typedef struct LNode *LinkList;
以上两个定义方式是等价的,是将 *LinkList 定 义为 struct LNode 类型,即 LinkList 被定义为一个类型名。这样就可以用 LinkList 来定义说明新的变量了,如:
LinkList L;
即将 L 定义为 struct LNode 类型的指针变量。
2.结构体类型变量定义
定义方式1:
struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
}LnodeA;
定义方式2:
struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
};
struct LNode LnodeA;
以上两个定义方式也是等价的,这样就将 LnodeA 定义为一个 struct LNode 类型的变量,即 LnodeA 为一个 struct LNode 类型的变量名。
结构体内标的定义方式
1.结构体,透明表区,DATA ELEMENT,DOMAIN
透明表是对一个物理表的逻辑描述,透明表里有许多字段,并且定义某些字段为 PRIMARY KEY,字段里又包含 DATA ELEMENT,用来描述语言属性和技术属性。DATA ELEMENT 中又包含 DOMAIN,它是定义数据类型和字段长度。
结构体一般是用来定义一个结构变量,有临时数据的储存,没有 PRIMARY KEY,结构体里包含 COMPONENT 而不是 FIELD
2.Internal table 中的属性分为三种 LINE TYPE ,KEY,TABLE KIND。
LINE TYPE 在 INTERNAL TABLE 里单独的一行叫 LINE TYPE,每一行的结构都一样。
KEY:相当于数据库里的主键。在排序的时候有用,UNIQUE 或 NON-UNIQUE。
TABLE KIND:分为 STANDARD,SORTED,HASHED。
三种类型的内表的定义
标准表:
DATA itab1 TYPE STANDARD TABLE OF scarr WITH NON-UNIQUE KEY carrid.
排序表:
DATA itab2 TYPE SORTED TABLE OF scarr WITH NON-UNIQUE KEY carrid.
哈希表:
DATA itab3 TYPE HASHED TABLE OF scarr WITH UNIQUE KEY carrid.
一般定义方法(标准表)
根据数据库表定义标准表
DATA itab4 TYPE TABLE OF scarr.
根据自建的结构变量定义标准表(最常用)
DATA: BEGIN OF wa,
carrid TYPE scarr-carrid,
carrnamen TYPE scarr-carrname,
END OF wa.
DATA itab5 LIKE TABLE OF wa.
根据数据字典中的表类型定义标准表
DATA itab6 TYPE ztabtype00_1.
根据内表定义内表
DATA itab7 LIKE itab6.
根据内表定义结构
DATA wa1 LIKE LINE OF itab7.
3. 定义结构的方式
根据数据字典中的表或者结构来定义程序的结构变量(或类型)
types str1 type spfli.
data str2 type sflight.
自定义程序中的结构变量(或类型)-最常见的
data: begin of wa,
carrid type spfli-carrid,
com(10) type c,
end of wa.
根据内表定义结构
data wa like line of itab.
注:根据数据库表定义的一定是结构
同名字段的赋值(重要)
Move-corresponding A to B.
read 是读取内表的一条数据
read table itab like table of wa.
读一内表的多条数据应用 loop
loop at itab into wa.
C/C++ 语言中的解释
结构体定义
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。
结构体作用
结构体和其他类型基础数据类型一样,例如 int 类型,char 类型 只不过结构体可以做成你想要的数据类型。以方便日后的使用。
在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。
结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
结构体的大小与内存对齐
结构体的大小不是结构体元素单纯相加就行的,因为我们现在主流的计算机使用的都是 32Bit 字长的 CPU,对这类型的 CPU 取 4 个字节的数要比取一个字节要高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素是就会相对更高效,这就是内存对齐的由来。
每个特定平台上的编译器都有自己的默认"对齐系数"(也叫对齐模数)。程序员可以通过预编译命令 #pragma pack(n),n=1,2,4,8,16 来改变这一系数,其中的n就是你要指定的"对齐系数"。
规则:
1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在 offset 为 0 的地方,以后每个数据成员的对齐按照 #pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照< span class="marked">#pragma pack 指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
3、结合1、2颗推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。
C++ 中的结构体
在 C 语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在 C 语言中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C 语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在 C++ 中,考虑到 C 语言到 C++ 语言过渡的连续性,对结构体进行了扩展,C++ 的结构体可以包含函数,这样,C++ 的结构体也具有类的功能,与class 不同的是,结构体包含的函数默认为 public,而不是 private。
C++ 控制台输出例子:
实例
#include #include using namespace std; struct point { //包含两个变量成员 int x; int y; }; int main(int argc, char *argv[]) { struct point pt; pt.x=1; pt.y=2; cout< } C++中的结构体与类的区别 类与结构体在 C++ 中只有两点区别,除此这外无任何区别。 (1)class 中默认的成员访问权限是 private 的,而 struct 中则是 public 的。 (2)从 class 继承默认是 private 继承,而从 struct 继承默认是 public 继承。 这两种定义有什么区别? typedef struct student { int num; struct student *next; }student; struct student { int num; struct student *next; }; 第二个 struct student 是定义了一个 student 结构体,这个明白吧。 第一个是用 typedef 把 struct student 这个结构体类型名字重新定义为 student,也就是说 struct student 和 student 表示同一个事物,都是一个类型的标识符,比如 typedef int zhengshu; 就是你把整型 int 重命名为 zhengshu,下面定义:int i; 和 zhengshu i; 两句就是等价的了。 结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构中可以使用不同的数据类型。 结构说明和结构变量定义 在 Turbo C 中,结构也是一种数据类型,可以使用结构变量,因此,象其它类型的变量一样,在使用结构变量时要先对其定义。 定义结构变量的一般格式为: struct 结构名 { 类型 变量名; 类型 变量名; ... } 结构变量; 结构名是结构的标识符不是变量名。 类型为第二节中所讲述的五种数据类型(整型、浮点型、字符型、指针型和无值型)。 构成结构的每一个类型变量称为结构成员,它象数组的元素一样,但数组中元素是以下标来访问的,而结构是按变量名字来访问成员的。 下面举一个例子来说明怎样定义结构变量。 struct string { char name[8]; int age; char sex[4]; char depart[20]; float wage1,wage2,wage3; }person; 这个例子定义了一个结构名为 string 的结构变量 person,如果省略变量名 person,则变成对结构的说明。用已说明的结构名也可定义结构变量。这样定义时上例变成: struct string { char name[8]; int age; char sex[4]; char depart[20]; float wage1,wage2,wage3; }; struct string person; 如果需要定义多个具有相同形式的结构变量时用这种方法比较方便,它先作结构说明,再用结构名来定义变量。 例如: struct string Tianyr, Liuqi, ...; 如果省略结构名,则称之为无名结构,这种情况常常出现在函数内部,用这种结构时前面的例子变成: struct { char name[8]; int age; char sex[4]; char depart[20]; float wage1,wage2,wage3; } Tianyr, Liuqi; 结构变量的使用 结构是一个新的数据类型,因此结构变量也可以象其它类型的变量一样赋值、运算,不同的是结构变量以成员作为基本变量。 结构成员的表示方式为: 结构变量.成员名 如果将结构变量.成员名看成一个整体,则这个整体的数据类型与结构中该成员的数据类型相同,这样就可象前面所讲的变量那样使用。 下面这个例子定义了一个结构变量,其中每个成员都从键盘接收数据,然后对结构中的浮点数求和,并显示运算结果。请注意这个例子中不同结构成员的访问。 实例 #include #include int main() { struct { char name[8]; int age; char sex[4]; char depart[20]; float wage1,wage2,wage3; }a; float wage; char c='Y'; while(c=='Y'||c=='y') { printf(nName:); scanf(%s, a.name); printf(Age:); scanf(%d, &a.wage); printf(Sex:); scanf(%s, a.sex); printf(Dept:); scanf(%s, a.depart); printf(Wage1:); scanf(%f, &a.wage1); printf(Wage2:); scanf(%f, &a.wage2); printf(Wage3:); scanf(%f, &a.wage3); wage=a.wage1+a.wage2+a.wage3; printf(The sum of wage is %6.2fn, wage); printf(Continue?); c=getche(); } } 结构数组和结构指针 结构是一种新的数据类型, 同样可以有结构数组和结构指针。 1.结构数组 结构数组就是具有相同结构类型的变量集合。假如要定义一个班级40个同学的姓名、性别、年龄和住址,可以定义成一个结构数组。如下所示: struct { char name[8]; char sex[4]; int age; char addr[40]; }student[40]; 也可定义为: struct string { char name[8]; char sex[4]; int age; char addr[40]; }; struct string student[40]; 需要指出的是结构数组成员的访问是以数组元素为结构变量的, 其形式为: 结构数组元素.成员名 例如: student[0].name student[30].age 实际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是一个结构变量, 第二维是结构成员。 注意: 结构数组的成员也可以是数组变量。 例如: struct a { int m[3][5]; float f; char s[20]; }y[4]; 为了访问结构a中结构变量 y[2] 的这个变量, 可写成 y[2].m[1][4] 2.结构指针 结构指针是指向结构的指针。它由一个加在结构变量名前的* 操作符来定义, 例如用前面已说明的结构定义一个结构指针如下: struct string { char name[8]; char sex[4]; int age; char addr[40]; }*student; 也可省略结构指针名只作结构说明, 然后再用下面的语句定义结构指针。 struct string *student; 使用结构指针对结构成员的访问,与结构变量对结构成员的访问在表达方式上有所不同。结构指针对结构成员的访问表示为: 结构指针名->结构成员 其中 -> 是两个符号 - 和 > 的组合,好象一个箭头指向结构成员。例如要给上面定义的结构中 name 和 age 赋值,可以用下面语句: strcpy(student->name, Lu G.C); student->age=18; 实际上,student->name 就是 (*student).name 的缩写形式。 需要指出的是结构指针是指向结构的一个指针,即结构中第一个成员的首地址,因此在使用之前应该对结构指针初始化,即分配整个结构长度的字节空间,这可用下面函数完成, 仍以上例来说明如下: student=(struct string*)malloc(size of (struct string)); size of (struct string) 自动求取 string 结构的字节长度, malloc() 函数定义了一个大小为结构长度的内存区域,然后将其诈地址作为结构指针返回。 注意: 1. 结构作为一种数据类型,因此定义的结构变量或结构指针变量同样有局部变量和全程变量,视定义的位置而定。 2. 结构变量名不是指向该结构的地址,这与数组名的含义不同,因此若需要求结构中第一个成员的首地址应该是 &[结构变量名]。 3. 结构的复杂形式:嵌套结构 嵌套结构是指在一个结构成员中可以包括其它一个结构,Turbo C 允许这种嵌套。 例如: 下面是一个有嵌套的结构 struct string { char name[8]; int age; struct addr address; } student; 其中: addr 为另一个结构的结构名, 必须要先进行, 说明, 即 struct addr { char city[20]; unsigned lon zipcode; char tel[14]; } 如果要给 student 结构中成员 address 结构中的 zipcode 赋值, 则可写成: student.address.zipcode=200001; 每个结构成员名从最外层直到最内层逐个被列出,即嵌套式结构成员的表达方式是: 结构变量名.嵌套结构变量名.结构成员名 结构体定义变量的三种方法 1.先定义结构体,然后在定义结构体变量 struct stu{ /*定义学生结构体类型*/ char name[20]; //学生姓名
上一篇:STM32八路ADC采用DMA方式
下一篇:简述STM32 CAN总线的设置
推荐阅读
史海拾趣
亿佰特在发展过程中,荣获了多项荣誉和奖项。公司成功入选2022年度四川省“专精特新”中小企业名单,这是对公司在细分市场专业化、企业管理精细化、产品或服务特色化、科技成果新颖化等方面的认可。同时,亿佰特还积极履行社会责任,关注环保和公益事业,展现了企业的良好形象和责任感。
以上五个故事方向涵盖了亿佰特在电子行业中的发展过程中的重要方面,希望能够帮助您了解该公司的成长历程。
近年来,Dialog公司通过一系列收购活动实现了快速扩张。例如,Dialog公司收购了Adesto公司,进一步拓展了工业物联网市场。这次收购为Dialog公司带来了一系列新的智能楼宇自动化工业解决方案,为其现有的制造自动化产品提供了非常好的补充。此外,收购Adesto还为Dialog公司带来了近5,000家客户公司,这些公司中大部分对Dialog公司来说是新客户。
随着国内市场的饱和,Alan Industries Inc.开始将目光投向海外市场。公司制定了国际化发展战略,通过设立海外分公司、参加国际展会等方式,积极开拓国际市场。同时,公司还加强了对国际市场的调研和分析,根据不同地区的市场需求和文化特点,推出了针对性的产品和服务。这些努力使得公司在国际市场上也取得了不俗的成绩。
Ericsson Power Modules公司起源于上世纪七十年代,作为爱立信公司的一个重要部门而诞生。当时,随着通信技术的飞速发展,对高效、稳定的电源解决方案的需求日益增长。爱立信凭借其深厚的技术积累和市场洞察力,决定进军电源模块领域,以满足这一市场需求。Ericsson Power Modules应运而生,专注于设计和制造电路板安装电源解决方案。
E-Z-HOOK公司非常重视与客户的关系建立与维护。他们始终坚持以客户为中心的经营理念,努力为客户提供高质量的产品和优质的服务。为了更好地了解客户需求和反馈,公司建立了完善的客户服务体系,包括售前咨询、售后服务和技术支持等。此外,公司还定期组织客户交流会和技术研讨会等活动,加强与客户的沟通与互动。这些努力使得E-Z-HOOK公司赢得了广大客户的信任和支持。
今天搞了AVR的TWI主从机通讯,专门写了一个简单的易于新手看懂的例子程序 我们有工程师级的程序,相信很多人都看不懂,曾经给人看过。 这次写了个新手级的AVR TWI程序,方便学习者了解TWI工作流程和原理。 显得稍微有点乱,整理下再发上来。 程序实现功能: 主机从0到255循环发送字节到从机,从机收到后返回 ...… 查看全部问答∨ |
英特尔推出7年超长生命周期的新款至强处理器 上网时间:2008年03月05日 收藏 打印版 推荐给同仁 发送查询 2008年2月27日,美国加利福尼亚州圣克拉拉市讯--英特尔公司今日宣布推出面向嵌入式市场的全新处理器(具有长达7年的 ...… 查看全部问答∨ |
触摸屏增长迅速,正在激起激烈的竞争、推动着技术发展,以及引起OEM的兴趣。iSuppli公司曾经预测,2012年全球主要触摸屏技术的出货额将从2006年的24亿美元上升到44亿美元。面对如此高速增长、竞争和技术多样性,触摸屏产业正在快速进化。 ...… 查看全部问答∨ |
一、总线:我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中 ,连连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很 多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各 器 ...… 查看全部问答∨ |
我司是WAVECOM代理商提供技术(软/硬件)支持以及DEMO. 联系方式: QQ:1109321905(请注明) 13554943187 Kavin (钟庆福) … 查看全部问答∨ |
|
各位大侠高手请支招,谢谢了。问题现象如下 平台:wince 6.0 + arm9(公司自己的SOC) 摄像头 OV7680 和OV2650, 两个都支持 用ce私有目录下的测试应用程序,可以正常preview,CAPTU ...… 查看全部问答∨ |
|
windowsCE的目录结构巨大而庞杂,尽管windowsCE的帮助对这个庞大的目录结构进行了说明仍然有很多目录下对应的代码在windowsCE help没有介绍其具体用途,下面就将windowsCE的目录结构进行简单的介绍。 1.SDK 在windowsCE.net4.2的根目录下存在PL ...… 查看全部问答∨ |