4-类和结构体和可选类型

import UIKit

var str = “Hello, playground”

// 1 枚举语法
// 与 C 和 Objective-C 不同,Swift 的枚举成员在被创建时不会被赋予一个默认的整型值
// 书写方式一
enum sizeType{
case small
case middle
case large
}
// 书写方式二
enum sizeNumber
{
case x, xl ,xxl
}

// 直接进行调用
sizeNumber.x

// 2 类和结构体
// 通过关键字class和struct来分别表示类和结构体,并在一对大括号中定义它们的具体内容
class Stuff
{
var name:String = “”;// 姓名
var age:UInt = 0;// 年龄
var department:Department? // 所在部门
// 在这里定义
}

struct Department
{
// 在这里定义结构体
var name:String = “”;// 部门名称
var no:String = “”;// 部门的编号
}

// 结构体和类在构造过程中会调用一个构造器

// 3 引用类型的比较
var s_a = Stuff();
s_a.name = “alex”;

var s_b = Stuff();
s_b.name = “tom”;

var s_c:Stuff = s_a;

// === 用于比较两个引用是否为一个示例
if s_a === s_b {
print(“stuff a===b”);
}else{
print(“not equal”);
}

// 如果是引用同一个示例 就会报相等
if s_a === s_c {
print(“stuff a===c”);
}

// 结构体是属于值类型的 不能用于=== 进行比较

// 4 类型嵌套
// 比如说在类中嵌套结构体 枚举类型
class Closes {
var color:String = “”;// 默认
var price:Double = 0;// 默认
var size:sizeType = .small; // 默认
// 嵌套枚举类型
enum sizeType {
case small,middl,large
}
//
}

var c = Closes();
c.price = 20.0;
c.size = .middl;

print(c.size);

// 5 可选类型
// 使用一个变量的时候,这个变量可能有值也可能没有值,在此类型后面加上?表示可选类型

// 下面函数的返回结果就是可选类型 如果B为0 则不能被除
func devide (a:Int,b:Int)->Double?{
if b==0 {
return nil;
}
return Double(a)/Double(b);
}

// 可选绑定
// 可选类型可以用于判断是否有值进行绑定
if let res: Double? = devide(a: 5, b: 5){
//
print(“赋值成功”)
}else{
print(“赋值失败”)
}

// 强制拆封 确定可选类型有值的话 在读取的时候 使用!取值 就是强制拆封
let res2:Double? = devide(a: 5, b: 2);
print(res2!);

// 隐式拆封
// 为了方便的访问可选类型 直接将可选类型后面添加!称之为隐式拆封
let res3:Double! = devide(a: 50, b: 10);
print(res3);

// 可选链
class Employee{
var name:String = “Tom”;
var depart:Depart?;
}

class Depart{
var name:String = “IT”;
var company:Company?;
}

class Company{
var name:String = “trade”;
}

var e = Employee();
// ? 表示引用的时候 某一个环节只要出现一个nil 则把nil 返回给引用者
// e.depart?.company?.name; 这种?的引用方式就是可选链 是一种温柔的访问方式

### C语言结构体类型的定义与使用方法 在C语言中,结构体(`struct`)是一种用户自定义的数据类型,允许将多个不同类型的数据组合在一起。通过结构体,可以更好地组织数据,提高程序的可读性可维护性。 #### 定义结构体类型 结构体类型的定义通常包括关键字 `struct` 一个可选的标签名,以及一组成员变量。例如: ```c struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; ``` 上述代码定义了一个名为 `student` 的结构体类型,包含学号、姓名、性别、年龄、成绩地址等成员[^1]。 也可以在定义结构体的同时定义结构体变量,如下所示: ```c struct stu { char *name; int num; char sex; float score; } stu1, stu2; ``` 这种方式可以直接创建结构体变量 `stu1` `stu2`,无需再使用 `struct stu` 进行声明[^3]。 #### 使用结构体变量 定义了结构体类型之后,可以通过以下方式使用结构体变量: - **访问结构体成员**:使用点运算符(`.`)来访问结构体中的成员变量。 ```c struct student stu1; stu1.num = 1001; strcpy(stu1.name, "张三"); ``` - **结构体指针的使用**:可以通过指向结构体的指针来访问结构体成员,使用箭头运算符(`->`)或先解引用再使用点运算符(`.`)。 ```c struct Stu s1 = { "张三", 30 }; struct Stu *ps = &s1; printf("%s %d\n", ps->name, ps->age); printf("%s %d\n", (*ps).name, (*ps).age); ``` 上述代码展示了如何通过指针访问结构体成员,其中 `ps->name` 是 `(*ps).name` 的简写形式[^2]。 #### 结构体数组 结构体也可以作为数组元素使用,用于管理多个相同类型结构体对象: ```c struct student class[50]; // 定义一个包含50个student结构体的数组 class[0].num = 1001; strcpy(class[0].name, "李四"); ``` #### 结构体作为函数参数 结构体可以作为函数参数传递给函数,也可以从函数返回。需要注意的是,当结构体较大时,建议使用指针传递以避免不必要的内存拷贝。 ```c void printStudent(struct student *stu) { printf("学号:%d\n", stu->num); printf("姓名:%s\n", stu->name); } int main() { struct student stu1 = {1001, "王五"}; printStudent(&stu1); return 0; } ``` #### 结构体内存对齐 在实际使用中,需要注意结构体的内存对齐问题。编译器为了优化访问速度,默认会对结构体成员进行对齐处理。不同平台可能有不同的对齐规则,因此在跨平台开发时需要特别注意这一点。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值