struct(structure中文)
【数据结构02】struct定义
数据结构-struct定义合集
二叉链表
三叉链表
要看你需不需要改变这变量的值,不需要的话就直接传参* ,需要改的话就传地址;
参数了加代表的是引用。。。表示形参引用实参。如果没有,则是实参拷贝给形参。
//
struct是结构体的关键字,用来声明结构体变量如 struct student { char num[10]; char name[20]; int age; };
typedef是用来定义新的类型名来代替已有的类型名, 可将上面的结构体定义为 typedef struct student { char num[10]; char name[20]; int age; }stud;
也就是说,将原来的struct student 重新定义为 stud
//
定义的结构体如果是指针,访问成员时就用-
如果定义的是结构体变量,访问成员时就用.
例如:
struct AAA {
int a;
char b;
};
struct AAA q; 访问成员就用:q.a;
struct AAA * p ; 访问成员就用:p-a;
//
//
ArcNode * p=new ArcNode; //开辟单变量地址空间
new运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,而动态创建的对象本身没有标识符名。
一般使用格式:
格式1:指针变量名=new 类型标识符;
格式2:指针变量名=new 类型标识符(初始值);
格式3:指针变量名=new 类型标识符 [内存单元个数];
//
int ** 是二级指针的定义方法,二级指针指向一级指针。
通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上。之后就可以通过二维指针直接访问了。
//
typedef int DataType,这句话的意思就是把DataType与int 指定为同一类型。
//
typedef struct LNode LNode; //将结构体类型struct LNode重命名为LNode
typedef struct LNode * LinkList; //将struct LNode * 重命名为LinkList
创建单链表:LinkList L; //等价于 struct LNode * L;
//
在C语言中,NULL和0的值都是一样的,但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值对于字符串的结尾,
使用'\0',它的值也是0,但是让人一看就知道这是字符串的结尾,不是指针,也不是普通的数值
//
struct词根
词根:struct
词根struct的含义:build: 建立
词根struct的解释:build 建造
词根struct的来源: 来源于拉丁语 struere(to build),过去分词是structus(原意为“层叠”)。词根-stro- 是词根 -stru- 发生了o-u 之间的音变的结果。 扩展资料 construct构造,建筑v.
con 共同 + struct 建造,建立 → 共同建立 → 建筑
construction建设n.
con 共同 + struct 建造,建立 + ion,construct 的名词 → 建设
destroy毁坏,破坏v.
de 相反 + stroy〔= struct〕建造,建立 → 不建反而破坏
destructible易毁坏的adj.
de 相反 + struct 建造,建立 + ible …的 → 违反建筑规格的 → 易毁坏的
destruction毁灭n.
de 相反 + struct 建造,建立 + ion 表名词 → 不建造 → 毁灭
destructive有破坏力的adj.
de 相反 + struct 建造,建立 + ive …的 → 有破坏力的
instruct指导,教导v.
in 使… + struct 建造,建立 → 使〔知识〕建立 → 指导
instruction教导,指导n.
instruct 指导,教导 + ion 表动作,intruct的名词 → 教导,指导
instructor教师,讲师n.
instruct 指导,教导 + or 表人 → 教师,讲师
obstruct妨碍v.
ob 反 + struct 建造,建立 → 反着建造 → 妨碍
obstruction阻碍;闭塞n.
ob 反 + struct 建造,建立 + ion,obstruct 的`名词 → 阻碍;闭塞
reconstruct重建v.
re 重新 + construct 构造,建筑 → 重建
structure构造;结构n.
struct 建造,建立 + ure 表结果 → 构造;结构
substruction下部结构;基础n.
sub 下 + struct 建造,建立 + ion 表名词 → 建在下面的 → 基础
superstructure上层建筑n.
super 上 + struct 建造,建立 + ure 行为有关的物 → 建在上面的 → 上层建筑
C语言中struct是个什么意思 怎么用 能不能通俗点说
结构(struct)
结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。
结构中可以使用不同的数据类型。
结构说明和结构变量定义
在Turbo 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
{
char name[8];?
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;?
} Tianyr, Liuqi;
结构作为一种数据类型,? 因此定义的结构变量或结构指针变量同样有局 部变量和全程变量, 视定义的位置而定。
结构变量名不是指向该结构的地址, 这与数组名的含义不同,? 因此若需要求结构中第一个成员的首地址应该是[结构变量名]。
扩展资料:
结构体变量可进行哪些运算
结构体变量不能相加、不能相减,也不能相互乘除,但结构体变量可以相互赋值。也就是说,可以将一个结构体变量赋给另一个结构体变量。但前提是这两个结构体变量的结构体类型必须相同。
结构体变量的引用方式决定了:
“结构体变量名”可以与“结构体成员名”同名。
“结构体变量名”可以与“结构体名”同名。
“两个结构体类型定义的结构体变量中的成员可以同名”。
就比如定义了一个结构体类型用于存放学生的信息,里面有成员“char name[20];”,那么如果又定义了一个结构体类型用于存放老师的信息,那么里面也可以有成员“char name[20];”
因为结构体成员在引用时,必须要使用“结构体变量名.成员名”的方式来引用,通过引用就可以区分它们,所以不会产生冲突,因此可以同名!
只要不冲突,都可以重名!但是两个结构体变量名就不可以重名了,因为无法区分它们,就会产生冲突。当然这里说的是在同一个作用域内,如果在一个函数中定义一个局部变量a,那么在另一个函数中当然也可以定义一个局部变量a。它们互不影响。
struct在c语言中是什么意思?
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。
结构体的定义形式为:
struct结构体名{
结构体所包含的变量或数组
};
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。
例子:
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
};
stu为结构体名,它包含了5个成员,分别是name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。
扩展资料
结构体变量——
既然结构体是一种数据类型,那么就可以用它来定义变量。
例如:
struct stu stu1, stu2;
定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。注意关键字struct不能少。
stu 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。
struct用法是什么?
关键字struct能定义各种类型的变量集合,称为结构(structure),并把它们视为一个单元。
1.struct的简单例子
下面是一个struct的简单的声明例子:
struct
horse
{
int
age;
int
height;
}
Silver;
这个例子声明了一个结构horse。horse不是一个变量名,而是一个新的类型,这个类型名称通常称为结构标记符(structure tag)或标记符名称(tag name)。结构标记符的命名方式和我们熟悉的变量名相同。
注意:
结构标记符可以和变量使用相同的名称,但最好不要这么做,因为这会使代码难以理解。
在这个结构例子中,结构的一个实例Silver是在定义结构时声明的。它是一个horse类型的变量,只要使用变量名称Silver,它都包含两个结构成员:age和height。
上述的例子也可变得复杂一些,如下:
struct
horse
{
int age;
int height;
char name[20];
char father[20];
char mother[20];
}
Dobbin = {24, 17, "Dobbin", "Trigger", "Flossie"};
1.1定义结构类型和结构变量
可以将结构的声明和结构变量的声明分开。取代前面例子的语句如下:
struct
horse
{
int age;
int height;
char name[20];
char father[20];
char mother[20];
};
struct horse Dobbin = {24, l7, "Dobbin", "Trigger", "Flossie"
};
现在有两个分开的语句。第一个定义结构标记符horse,第二个声明该类型的变量Dobbin。结构定义和结构变量声明语句都用分号结束。在Dobbin结构成员的初始值中,Dobbin的父亲是Trigger,母亲是Flossie。
1.2访问结构成员
要引用结构成员,应在结构变量名称的后面加上一个句点,再加上成员变量名称。例如,发现Dobbin隐瞒了它的年龄,事实上它比初始化的值年轻,就可以将值修正如下:
Dobbin.age = 12;
结构变量名称和成员名称间的句点是一个运算符,称为成员选择运算符。这行语句Dobbin结构的age成员设定成12。结构成员和相同类型的变量完全一样,可以给它们设定值,也可以在表达式中像使用一般变量一样使用它们。
用下面的语句定义horse结构:
struct
horse
{
int age;
int height;
char name[20];
char father[20];
char mother[20];
};
这个结构有两个整数成员age和height,以及三个字符数组成员name、father和mother。在闭括号的后面仅是一个分号,还没有声明horse类型的变量。在定义完horse结构后,具有如下语句:
struct
horse My_first_horse;
1.3未命名的结构
不—定要给结构指定标记符名字。用一条语句声明结构和该结构的实例时,可以省略标记符名字。在上一个例子中,声明了horse类型和该类型的实例My_first_horse,也可以改为:
struct
{
int age;
int height;
char name[20];
char father[20];
char mother[20];
}
My_first_horse;
使用这种方法的最大缺点是不能在其他语句中定义这个结构的其他实例。这个结构类型的所有变量必须在一行语句中定义。
结构体struct简单理解
结构体(struct):是一种复合数据类型,结构类型。
一个指向变量的指针表示的是占内存中起始位置
一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组
后两种是通过结构体变量指针来引用的结构体变量中的成员,第2种在* pStruct上加上小括号的原因是因为要提升 ”* pStruct“ 的运算优先级,因为在默认情况 . 运算符的优先级是比*运算符的优先级要高的。
个人比较喜欢用"-指向运算符"来引用结构体中的成员
结构体内存对齐为两个原则:
原则 1. 前面的地址必须是后面的地址正数倍,不是就补齐。
原则 2. 整个Struct的地址必须是最大字节的整数倍。
我们可以看到,MyStruct中有5个成员,如果直接相加的话大小应该是16,但在32位MSVC里它的sizeof结果是32。
之所以结果出现偏差,为了保证这个结构体里的每个成员都应该在它对齐了的内存位置上,而在某些位置插入了Padding。
下面我们尝试考虑内存对齐,来计算一下这个结构体的大小。首先,我们可以假设MyStruct的整体偏移从0x00开始,这样就可以暂时忽略MyStruct本身的对齐。这时,结构体的整体内存分布如下图所示:
我们可以看到,char和int之间;short和long long之间,为了保证成员各自的对齐属性,分别插入了一些Padding。
因此整个结构体会被填充得看起来像这样:
注意到上面加了Padding的示意结构体里,e的后面还跟了7个字节的填充。这是因为结构体的整体大小必须可被对齐值整除,所以“char e”的后面还会被继续填充7个字节好让结构体的整体大小是8的倍数32。
参考: 关于内存对齐的那些事