函数调用时,当实参是不可变对象时,形参值改变不会影响实参;当实参是可变对象时,形参值改变可能会影响实参
时间: 2024-02-22 10:01:18 浏览: 182
是的,当函数调用时,如果实参是不可变对象(如数字、字符串、元组等),则函数内对形参的值的修改不会影响到实参的值。因为不可变对象的值在创建后无法改变,如果函数内部试图修改形参的值,实际上是创建了一个新的对象,并将形参重新指向了这个新对象,不会改变原来实参所指向的对象。
而当实参是可变对象(如列表、字典等)时,函数内部对形参值的修改可能会影响到实参的值。这是因为可变对象的值可以在原地修改,函数内部对形参值的修改会直接影响到实参所指向的对象。如果不想在函数内部修改实参,可以在函数内部创建一个新的可变对象,并将实参的值复制一份到新对象中,然后对新对象进行操作。
相关问题
c++1.用数组作为函数形参实现函数,函数调用时实参为数组。 2.用数组作为函数形参实现函数,函数调用时实参为指针。 3.用指针作为函数形参实现函数,函数调用时实参为数组。 用指针作为函数形参实现函数,函数调用时实参为指针。
1. 用数组作为函数形参实现函数,函数调用时实参为数组:
```c
void func(int arr[], int size) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
return 0;
}
```
2. 用数组作为函数形参实现函数,函数调用时实参为指针:
```c
void func(int *arr, int size) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
return 0;
}
```
3. 用指针作为函数形参实现函数,函数调用时实参为数组:
```c
void func(int *arr, int size) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(&arr[0], 5);
return 0;
}
```
4. 用指针作为函数形参实现函数,函数调用时实参为指针:
```c
void func(int *arr, int size) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
return 0;
}
```
注意,指针和数组在函数传参时有一些细微的差别,需要注意。
关键参数,在函数调用时,实参顺序可以与形参顺序不一致。
是的,使用关键字参数时,函数调用时实参的顺序可以与函数定义时形参的顺序不一致。这是因为通过使用关键字参数,可以将实参与形参进行显式的匹配,从而保证传递的值与函数预期的一致。具体来说,使用关键字参数的语法是在函数调用时,使用形如"参数名=值"的形式来指定每个参数的值,比如:
```
def func(a, b, c):
print(a, b, c)
func(c=3, b=2, a=1)
```
在上述代码中,我们按照"参数名=值"的形式指定了每个参数的值,并且实参的顺序与函数定义时的形参顺序不一致,但是函数仍然可以正确输出结果"1 2 3"。
阅读全文