数据封装-结构体

结构体类型作用

*结构体类型允许程序员把一些分量聚合成一个整体,用一个变量表示。

*一个结构体的各个分量都有名字,把这些分量称为成员(member)。

*由于结构体的成员可以是各种类型的,程序员能创建适合于问题的数据集合。

结构体类型的定义

*定义结构体类型中包括哪些分量

*格式:

struct 结构体类型名{

字段声明;

};

注意

*字段名可与程序中的变量名相同

*在不同的结构体中可以有相同的字段名

*结构体成员的类型可以是任意类型,当然也可以是结构体类型

结构体变量的初始化

studentT student1={“00001”,“张三”,87,90,77};

定义结构体类型的同时定义变量

struct 结构体类型名{                          struct{

  字段声明;                                     字段声明;

}结构体变量;                                     }结构体变量;

区别:前者可以继续用结构体类型名定义变量

结构体变量的赋值

同类型的结构变量之间可以相互赋值,如

student1=student2;

将student2的成员对应赋给student1的成员

这点很重要!!

指向结构体的指针

*直接定义指针变量

studentT  *sp;

*也可以在定义结构体类型的同时定义指向结构体的指针

struct 结构体类型名{

字段声明;

}  *结构体指针;

通过指针操作记录

*给结构体指针赋值,如:

sp = &student1;

*结构体指针的引用:

(*指针).成员      如:(*sp).name

指针->成员     如:sp->name

*->是所有运算符中优先级最高的

*通常程序员习惯使用第二种方法

动态分配结构体的空间

v指向结构体指针的另一种用法是存储动态申请到的内存的首地址。用法和申请普通的动态变量一样。如:

studentT  *sp;

sp = new studentT;

结构体数组

*用于描述个体的集合

*定义格式:

studentT studentArray[SIZE]

指针与结构体数组

*与普通的指针一样,指向结构体的指针也能够用来指向一个结构体数组。此时,对指针加1就是加了该结构体的大小。

指向结构体的指针作为参数

*因为结构体是值传递,当希望把函数内部对结构体的修改返回给主调函数时,可以用指针传递或引用传递

*由于结构体一般占用的内存量都比较大,值传递既浪费空间又浪费时间。因此可用指针传递或引用传递

*指针传递形式比较繁琐,所以C++通常用引用传递

*引用传递的问题是函数中可以修改实际参数,要控制函数中不能修改实际参数,可以加const限定

引用传递&加const=节约内存,提高函数调用速度,安全可靠

函数返回结构体返回的是结构体的复制(对类而言也是如此,这样的话就会调用拷贝构造函数)

时间: 2025-01-16 02:37:09

数据封装-结构体的相关文章

C语言:结构体

构造类型:由已有的数据类型构成类型 1.数组:多个同种类型的数据构成的那么一种类型 特点:只能存放一种数类型 2.结构体:从来存放表示某种特定含义的一组数据 它是对数据封装 函数对功能封装 好处:提高代码的可读性 提高数据易用性 提高代码可维护性 定义结构体: 1.定义结构类型 struct 结构类型名称{ 成员类型 成员名称; ... };//必须加分号 2.通过结构体类型定义结构变量 struct 结构类型名称 结构体变量名称;

结构体简单理论知识

为什幺使用结构体 有的时候我们需要把不同类型的数据封装成一个整体,以便于引用. 结构就类似于类 一个类就是将方法属性封装起来 而结构简单说是将 一些变量组合在一起. 定义一个结构的一般形式 struct 结构名 { 成员列表   //必须进行类型声明 }变量名表列; 例如: struct People { char *name; char sex int age; }people1,people2; 结构的嵌套定义: struct Date { int year; int month; int

ios学习之旅------玩转结构体

1.全局变量和局部变量 局部变量: 概念:定义函数内部变量 定义格式:变量类型 变量名称; 作用域:从定义那一行开始到所在代码块结束 生命周期:从代码执行到定义的哪一行开始,到其所在的代码的结束为止 特点:相同的代码块中不可以有同名的变量 不同的代码块中可以有同名的变量,内部的变量会覆盖外部定义的变量 全局变量: 概念:定义在函数外部变量 定义:变量类型 变量名称 = 值; 声明:变量类型 变量名称; 特点:1.不可以重复定义,但可以重复声明 2.局部变量可以与全局变量同名,在局部变量的作用域范

结构体和类的区别,联系

结构体和类的共同点: 都可以将多个数据封装为一个整体 结构体和类的不同点: 结构体只能封装数据,而类还可以封装行为: 结构体实例是值类型,类实例是对象类型 结构体实例存储在栈空间,类实例存储在堆空间 结构体变量赋值是值拷贝,类实例赋值是指针引用 应用场景: 如果封装的这个数据,不仅有数据还有方法,只能使用类, b. 如果表示实体,没有行为,光有属性, i.     如果属性较少,只有几个的情况下,就定义为结构体,分配在栈,提高运行效率 ii.     如果属性较多,就不要定义为结构体,因为这样结

关于结构体

1.结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构. typedef struct People { int a; char b; double c; }P: 其中:struct是关键词, People是标签, a b c是成员, P是此结构体声明的变量. 于是在声明变量的时候就可:P p1; 这里的P实际上就是struct People的别名.P==struct People 另外这里也可以不写People(于是也不能struct People p1;了,

Linux C中结构体初始化

    在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated initializer).下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb_storage_driver = { .owner = THIS_MODULE, .name = "

在Swift结构体中如何实现写时复制?

结构体(Struct)在Swift语言中占有重要地位,在Swift标准库中,大约有90%的公开类型都是结构体,包括我们常用的Array.String.Dictionary.结构体相比类,一个最重要的特性就是它是值类型,而类似引用类型.值类型是通过复制值来赋值的,而不是引用同一个内存地址,这样就不存在数据共享的问题,能防止意外的数据改变,并且它是线程安全的. 举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型.因此下面的代码中: let array1 =

结构体的大小

系统在存储结构体变量时存在地址对齐问题,编译器在编译程序时会遵循两条原则: 一.结构体变量中成员的偏移量必须是成员大小的整数倍: 二.结构体大小必须是所有成员大小的整数倍. 1 #include<stdio.h> 2 3 struct a{ 4 int i; 5 float f; 6 char c; 7 double d; 8 long l; 9 }b; 10 11 int main(){ 12 printf("%d\n",sizeof(b.i));// 4 13 prin

关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型

关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使用NSStringFromCGRect(CGRect rect)来直接打印一个结构体,其他打印可以参考以下内容 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFrom