函数值传递和地址传递

#include<stdio.h>
void fun (int *a,int *b)
{
    int *t;
     t=*a;
    *a=*b;
    *b=t;
}
int main(void)
{
    int x=3,y=5;
    fun(&x,&y);
    printf("%d,%d\n",x,y);
    
}
//5,3
Press any key to continue

### Python 函数值传递机制详解 在 Python 中,函数参数的传递本质上是一种 **对象引用传递** 的机制。尽管有时会提到“值传递“引用传递”,但实际上它们都可以统一理解为一种基于对象的行为模式。 #### 对象引用的基础概念 Python 是一门动态类型的编程语言,在其内部实现中,“一切皆对象”。无论是整数、字符串还是列表等复杂数据结构,都以对象的形式存在。当我们将某个变量作为参数传递到函数中时,实际上是将该变量所指向的对象的引用(即内存地址传递给了函数中的形参[^2]。 #### 参数传递的具体行为分析 根据对象是否可变以及其实现细节的不同,可以进一步细分为两种主要场景: 1. **不可变对象的传递** 如果实参是一个不可变对象(如 `int`、`float`、`str` 或元组),那么即使将其赋值给形参并尝试修改它,也不会影响原始对象的内容。因为这些类型是不可变的,任何看似对其内容的操作实际上都会创建一个新的对象实例。 下面是一段代码示例展示这一特性: ```python def modify_value(x): x += 10 print(f"Inside function: {x}") # 输出新的局部变量值 a = 5 modify_value(a) print(f"After function call: {a}") # 原始变量未受影响 ``` 运行上述程序的结果如下所示: ``` Inside function: 15 After function call: 5 ``` 此处的关键在于,虽然我们试图改变 `x` 的值,但由于 `int` 类型属于不可变对象,因此操作仅限于当前作用域内的新副本上,并不会波及外部的实际参数[^4]。 2. **可变对象的传递** 当涉及像列表 (`list`) 字典 (`dict`) 那样的可变容器类时,则情况有所不同。由于这类对象允许在其生命周期内被更改,所以如果我们在函数体内对相应形参进行了某些原地更新 (in-place modification),这种变化同样能够反映回原来的实参之上。 考虑下面的例子说明这一点: ```python def append_to_list(lst): lst.append('new element') print(f"List inside the function: {lst}") my_list = ['first', 'second'] append_to_list(my_list) print(f"List after calling the function: {my_list}") ``` 执行这段脚本会产生这样的输出结果: ``` List inside the function: ['first', 'second', 'new element'] List after calling the function: ['first', 'second', 'new element'] ``` 可见,对于可变的数据结构而言,一旦发生改动便会影响到全局范围内的状态共享[^3]。 综上所述,无论何时何地,只要记住一点即可——Python 总是以某种形式复制了原有实体的一个指针交给目标接收者;至于后续如何演变完全取决于具体使用的类别属性及其内在逻辑设计思路决定最终呈现出来的效果差异而已! ```python def test_mutable_immutable(param): param.extend([9,8]) if isinstance(param,list) else None try: param *=2 except TypeError as e : pass example_int=7 test_mutable_immutable(example_int) example_list=[1,2,3] test_mutable_immutable(example_list) print("Integer Example:", example_int,"is Unchanged.") print("But list changes to", example_list ) ``` 运行上面这个例子将会得到预期之外却合理的结果验证前面讨论过的理论依据正确无误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值