如果形参是指针,实参也是指针,把实参传进去,是不是对指针的拷贝吗?
3个回答
展开全部
程序一可以实现a,b值的交换,程序二则不行。要想明白这个需要知道一下几点知识:
1,变量的作用范围;局部变量(程序二中void
swap(a,b)子程序中的变量a,b,k都为局部变量,生命周期从调用此函数开始,函数执行完变量得到注销。
2,函数参数的传递方式;以上两个子程序参数传递方式都为值传递----把实参的值拷贝到形参。但在子程序中对形参的操作不影响实参。
3,指针变量的含义;所谓指针变量,即指向某一变量(整形,浮点型,字符型等等)地址的变量。也就是说,指针变量的值是某一变量的地址。
下面分析:
程序一:调用子程序后,形参通过值传递的方式获取实参的值,既形参和实参保存有同一变量的地址,在子程序中,对形参的操作都是间接对所指向变量进行操作,并非对形参本身的值进行操作。既可以改变a,b的值。
程序二:在子程序中,所有的操作都是对形参本身的值进行操作,当执行完后,形参(局部变量)注销。
程序2:
1,变量的作用范围;局部变量(程序二中void
swap(a,b)子程序中的变量a,b,k都为局部变量,生命周期从调用此函数开始,函数执行完变量得到注销。
2,函数参数的传递方式;以上两个子程序参数传递方式都为值传递----把实参的值拷贝到形参。但在子程序中对形参的操作不影响实参。
3,指针变量的含义;所谓指针变量,即指向某一变量(整形,浮点型,字符型等等)地址的变量。也就是说,指针变量的值是某一变量的地址。
下面分析:
程序一:调用子程序后,形参通过值传递的方式获取实参的值,既形参和实参保存有同一变量的地址,在子程序中,对形参的操作都是间接对所指向变量进行操作,并非对形参本身的值进行操作。既可以改变a,b的值。
程序二:在子程序中,所有的操作都是对形参本身的值进行操作,当执行完后,形参(局部变量)注销。
程序2:
展开全部
主要是函数
void
swap(int
a,int
b)
与
void
swap(int
*p1,int
*p2)
的差别,
前面函数:只是将实参传递给形参,并不会返回(传递的是值)
后面函数:是将实参的地址传递给形参,在程序中形参实际上操作的是实参的地址,所以程序中交换的是地址下的值,也就起到了互换的目的了
void
swap(int
a,int
b)
与
void
swap(int
*p1,int
*p2)
的差别,
前面函数:只是将实参传递给形参,并不会返回(传递的是值)
后面函数:是将实参的地址传递给形参,在程序中形参实际上操作的是实参的地址,所以程序中交换的是地址下的值,也就起到了互换的目的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果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(值传递,头结点没有返回出来),而产生内存泄漏。
定义时
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(值传递,头结点没有返回出来),而产生内存泄漏。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询