语言中结构体变量和结构体类型的定义

1.结构体类型定义node

定义方式1ios

Typedef struct  LNode {程序员

   int  data;  // 数据域数据库

   struct LNode   *next;  // 指针域数组

} *LinkList;函数

 

定义方式2oop

struct  LNode {大数据

   int  data;  // 数据域spa

   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定义为一个truct  LNode类型的变量,即LnodeA为一个truct  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,对这类型的CPU4个字节的数要比取一个字节要高效,也更方便。因此在结构体中每一个成员的首地址都是4的整数倍的话,取数据元素是就会相对更高效,这就是内存对齐的由来。

每一个特定平台上的编译器都有本身的默认“对齐系数”(也叫对齐模数)。程序员能够经过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。  

规则:  

一、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,之后每一个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。  

二、结构(或联合)的总体对齐规则:在数据成员完成各自对齐以后,结构(或联合)自己也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。  

三、结合一、2颗推断:当#pragma pack的n值等于或超过全部数据成员长度的时候,这个n值的大小将不产生任何效果。

C++中的结构体

在C语言中,能够定义结构体类型,将多个相关的变量包装成为一个总体使用。在结构体中的变量,能够是相同、部分相同,或彻底不一样的数据类型。C语言中,结构体不能包含函数面向对象的程序设计中,对象具备状态(属性)和行为,状态保存在成员变量中,行为经过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展,C++的结构体能够包含函数,这样,C++的结构体也具备的功能,与class不一样的是,结构体包含的函数默认为public,而不是private。  

C++控制台输出例子:  

#include <cstdlib>  

#include <iostream>  //定义结构体  

struct point  

{  

//包含两个变量成员  

int x;  

int y;  

};  

using namespace std;  

int main(int argc, char *argv[]) 

 {  

struct point pt;  

pt.x=1;  

pt.y=2;  

cout<<pt.x<<endl<<pt.y<<endl;  

return EXIT_SUCCESS;  

}

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; 两句就是等价的了

结构是由基本数据类型构成的、并用一个标识符来命名的各类变量的组合。结构中可使用不一样的数据类型。1、结构说明和结构变量定义在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; 2、结构变量的使用结构是一个新的数据类型,所以结构变量也能够象其它类型的变量同样赋值、运算,不一样的是结构变量以成员做为基本变量。结构成员的表示方式为: 结构变量.成员名 若是将结构变量.成员名当作一个总体,则这个总体的数据类型与结构中该成员的数据类型相同,这样就可象前面所讲的变量那样使用。下面这个例子定义了一个结构变量,其中每一个成员都从键盘接收数据,而后对结构中的浮点数求和,并显示运算结果。请注意这个例子中不一样结构成员的访问。 #include 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.2f\n, wage);printf(Continue?); c=getche(); } } 3、结构数组和结构指针 结构是一种新的数据类型, 一样能够有结构数组和结构指针。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; 每一个结构成员名从最外层直到最内层逐个被列出,即嵌套式结构成员的表达方式是: 结构变量名.嵌套结构变量名.结构成员名 其中: 嵌套结构能够有不少,结构成员名为最内层结构中不是结构的成员名。

相关文章
相关标签/搜索