值类型和引用类型:结构体是值类型,而类是引用类型。值类型在传递时传递的是值本身,而引用类型在传递时传递的是引用地址。举例怎么体现的
时间: 2024-04-30 09:21:12 浏览: 17
假设我们有一个结构体和一个类,它们都包含一个整数类型的成员变量`x`,并且有一个打印成员变量的方法`printX`。
```
struct MyStruct {
var x: Int
func printX() {
print("MyStruct: x = \(x)")
}
}
class MyClass {
var x: Int
init(x: Int) {
self.x = x
}
func printX() {
print("MyClass: x = \(x)")
}
}
```
现在,我们创建一个原始值为5的结构体实例和一个原始值为10的类实例:
```
var myStruct = MyStruct(x: 5)
var myClass = MyClass(x: 10)
```
然后,我们将它们分别传递给一个函数,并在函数中修改它们的成员变量:
```
func updateValues(_ structInstance: MyStruct, _ classInstance: MyClass) {
structInstance.x = 10
classInstance.x = 20
}
updateValues(myStruct, myClass)
```
最后,我们分别调用这两个实例的打印方法:
```
myStruct.printX() // 输出 "MyStruct: x = 5"
myClass.printX() // 输出 "MyClass: x = 20"
```
我们可以看到,结构体实例的`x`成员变量仍然是5,而类实例的`x`成员变量变成了20。这是因为结构体是值类型,传递时传递的是实例本身的值,而类是引用类型,传递时传递的是实例的引用地址。所以在函数中修改类实例的成员变量,会直接影响到原始实例,而修改结构体实例的成员变量,则只会影响传递给函数的那个副本。
相关推荐
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)