关于指针和函数传参的解析

 可以看出来test1,test2,test3分别传递了一个指针 ,一个指针的指针和一个普通的int类型。

分析一下输出结果。

 声明了L1 . L2,L3 三个LinkList 变量(Node*)和一个int a做参照。

正常思想,传递int类型,发生值传递,int a被传递进test3。

调用test3之前

a在内存中的地址是115f99c,存放的值是3

进入test3之后 

a在内存中的地址是115f8c8,存放的值还是3

出test3之后

a在内存中的地址是115f99c,存放的值还是3,

这就是值传递,存放的值没有变化,但其实在内存中数据存在的位置已经发生了变化。所以a=4并没有被打印出来,那是因为 115f8c8这个内存的位置被修改为4,115f99c内存并没有被修改。

------突然加一句 

算了不想说了

-----

那么,传递int *类型呢,这里用LinkList 变量(Node*)做尝试(这里踩的坑)

test1中传递LinkList 原型是Node* ,认为传递的是一个指针,所以能把数据给带出来

L3进入test1之前 Node*

本身地址115f9a8,指向1385ed0,这里1385ed0其实也指向Node的实例

进入test1之后

本身地址115f8c8,指向1385ed0,这里1385ed0其实也指向Node的实例

L3malloc之后

本身地址115f8c8,指向1385f08,这里1385f08其实也指向Node的实例

L3出test1之后

本身地址115f9a8,指向1385ed0,这里1385ed0其实也指向Node的实例

看起来传递了指针,但是目的并没有达到。

所以如果想要通过传递指针来改变值的话,

举个例子 想要改变int* 类型的参数的值,函数的参数就必须是int**,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值