1. 为什么方法中修改不影响外面的值?
2. 方法中的形参相当于方法中定义的变量,所以说所有的参数都是拷贝
3. 为什么go中传递指针就可以修改外面的值,因为虽然定义了两个变量,但是他们指向同一块内存地址
在函数调用过程中,形参和实参通常会在内存中分配空间。
当你调用一个函数时,函数的形参(形式参数)会在函数的栈帧中分配空间。栈帧是函数在执行期间使用的一块内存区域,用于存储局部变量、函数参数和其他与函数执行相关的信息。
对于函数的实参(实际参数),它们的值会被复制到相应的形参中。这通常涉及到内存空间的分配。
对于基本数据类型,如整型、浮点型、布尔型等,它们的值会直接复制到形参的内存空间中。
对于引用类型,如数组、切片、映射、结构体等,实参传递给形参时,实际上是将引用的副本(内存地址)复制到形参的内存空间中。这意味着形参和实参将引用相同的对象,它们指向同一个内存地址。
需要注意的是,如果实参是指针类型,那么形参将接收指针的副本,也就是说形参将引用相同的内存地址。这也意味着在函数内部,可以通过形参修改实参所指向的值。
总结:在函数调用过程中,形参和实参通常会在内存中分配空间。基本数据类型的实参值会直接复制到形参的内存空间中,而引用类型的实参传递的是引用的副本(内存地址),形参和实参将引用相同的对象。如果实参是指针类型,形参将接收指针的副本,可以通过形参修改实参所指向的值。
4. 指针和内存地址的关系
指针(Pointer)和内存地址(Memory Address)是相关概念,但在某些方面有一些区别。以下是它们之间的区别:
定义和类型:指针是一种特殊的变量类型,用于存储内存地址。指针变量保存了一个值的内存地址。内存地址是一个无符号整数,表示计算机内存中的某个位置。
内容和作用:指针变量存储的是某个值在内存中的地址,它指向该值的存储位置。通过指针,可以间接引用和修改存储在该地址上的值。内存地址是一个标识符,用于表示存储在计算机内存中的某个特定位置。
使用和操作:指针可以被解引用(dereference)来访问和修改所指向的值。通过在指针变量前加上星号 *,可以获取指针所指向的值。内存地址本身并不能直接访问或修改存储在该地址上的值,需要通过指针来间接操作。
可能的取值范围:指针的取值范围是由计算机体系结构和操作系统决定的,通常是一个机器字长(Machine Word Length)的大小。内存地址的取值范围取决于计算机系统的物理内存寻址能力。
总之,指针是一种变量类型,用于存储内存地址。它们允许间接访问和修改存储在该地址上的值。内存地址是一个标识符,用于表示计算机内存中的某个特定位置。指针是通过存储和操作内存地址来实现的。