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

2024-11-26 04:21:35
推荐回答(4个)
回答1:

程序一可以实现a,b值的交换,程序二则不行。要想明白这个需要知道一下几点知识:
1,变量的作用范围;局部变量(程序二中void swap(a,b)子程序中的变量a,b,k都为局部变量,生命周期从调用此函数开始,函数执行完变量得到注销。
2,函数参数的传递方式;以上两个子程序参数传递方式都为值传递----把实参的值拷贝到形参。但在子程序中对形参的操作不影响实参。
3,指针变量的含义;所谓指针变量,即指向某一变量(整形,浮点型,字符型等等)地址的变量。也就是说,指针变量的值是某一变量的地址。
下面分析:
程序一:调用子程序后,形参通过值传递的方式获取实参的值,既形参和实参保存有同一变量的地址,在子程序中,对形参的操作都是间接对所指向变量进行操作,并非对形参本身的值进行操作。既可以改变a,b的值。
程序二:在子程序中,所有的操作都是对形参本身的值进行操作,当执行完后,形参(局部变量)注销。
程序2:

回答2:

是拷贝。
后一个程序之所以不能实现交换,是因为C/C++函数参数是传值(把实参的值拷贝的形参)的,所以函数中对形参的操作不会对对应的实参产生影响。
前一个程序之所以能够实现交换,是因为函数中不是对形参进行操作,而是对形参所指的内存进行的操作,而形参所指的内存就是对应实参所指的内存。

回答3:

主要是函数
void swap(int a,int b)



void swap(int *p1,int *p2)

的差别,
前面函数:只是将实参传递给形参,并不会返回(传递的是值)
后面函数:是将实参的地址传递给形参,在程序中形参实际上操作的是实参的地址,所以程序中交换的是地址下的值,也就起到了互换的目的了

回答4:

是拷贝