如果形参是指针,实参也是指针,把实参传进去,是不是对指针的拷贝吗?

 我来答
乾莘出佩
2020-03-26 · TA获得超过3.1万个赞
知道小有建树答主
回答量:1.1万
采纳率:34%
帮助的人:762万
展开全部
程序一可以实现a,b值的交换,程序二则不行。要想明白这个需要知道一下几点知识:
1,变量的作用范围;局部变量(程序二中void
swap(a,b)子程序中的变量a,b,k都为局部变量,生命周期从调用此函数开始,函数执行完变量得到注销。
2,函数参数的传递方式;以上两个子程序参数传递方式都为值传递----把实参的值拷贝到形参。但在子程序中对形参的操作不影响实参。
3,指针变量的含义;所谓指针变量,即指向某一变量(整形,浮点型,字符型等等)地址的变量。也就是说,指针变量的值是某一变量的地址。
下面分析:
程序一:调用子程序后,形参通过值传递的方式获取实参的值,既形参和实参保存有同一变量的地址,在子程序中,对形参的操作都是间接对所指向变量进行操作,并非对形参本身的值进行操作。既可以改变a,b的值。
程序二:在子程序中,所有的操作都是对形参本身的值进行操作,当执行完后,形参(局部变量)注销。
程序2:
跆风者DG
2020-04-10 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:28%
帮助的人:739万
展开全部
主要是函数
void
swap(int
a,int
b)

void
swap(int
*p1,int
*p2)
的差别,
前面函数:只是将实参传递给形参,并不会返回(传递的是值)
后面函数:是将实参的地址传递给形参,在程序中形参实际上操作的是实参的地址,所以程序中交换的是地址下的值,也就起到了互换的目的了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
尚抒丰鹤
2019-11-30 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:25%
帮助的人:756万
展开全部
如果hl是指针则:
定义时
void
initlist(lnode
&hl)
应该这么用
initlist(*hl);
注意上面的*不是表示指针,而是表示取hl所指向的内容。
定义时
void
initlist(lnode
*hl)
则应该这么用
initlist(hl);
但这只是单纯的从语法来回答你的问题的,对于你这个函数,我想函数的意图是初始化一个链表,并且头结点hl初始为null。
那么你这里的参数hl就必须是个指针的引用或指针的指针了。
否则
void
initlist(lnode
&hl)
的形式调用initlist(*hl)时会报错(访问无效地址)
void
initlist(lnode
*hl)
的形式调用initlist(hl)时hl还是会为null(值传递,头结点没有返回出来),而产生内存泄漏。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式