用指针变量作为函数参数
为什么用指针变量作为函数参数就可以?
不用指针变量, 实参 值传递 的方式单向传到 形参, 那么只改变调用函数里的值,没有回传到实参来,
那么,用了指针变量, 值是怎么到实参来的?
谭浩强 的第2版 例题10.2 , 指针的那章, 明确说了不是将形参值传回实参的 展开
#include <stdio.h>
void swap1(int x,int y),swap2(int *px,int *py),swap3(int *px,int *py);
int main(void)
{
int a=1,b=2;
int *pa=&a,*pb=&b;
swap1(a,b);
printf("s1:a=%d,b=%d\n",a,b);
a=1,b=2;
swap2(pa,pb);
printf("s2:a=%d,b=%d\n",a,b); a=1,b=2;
swap3(pa,pb);
printf("s3:a=%d,b=%d\n",a,b); return 0;
}
void swap1(int x,int y)
{
int t; t=x; x=y; y=t;
}
void swap2(int *px,int *py)
{
int t; t=*px; *px=*py; *py=t;
}
void swap3(int *px,int *py)
{
int *pt; pt=px; px=py; py=pt;
}
扩展资料
对象与类
对象(Object)
Visual Basic.NET 具有“面向对象”的特性,Visual Basic.NET 应用种程序的基本单元是对象,用 Visual Basic.NET 编程就是用“对象”组装程序。这种“面向对象”的编程方法与传统的全部用代码编制程序的方法有很大区别,就像用集成电路芯片组装电视机和用三极管,二极管组装电视机的区别一样。显然,“面向对象”的编程方法比传统的编程方法更简单,更方便,并且编写出的程序也更加稳定。因此,“对象”可以被看做 Visual Basic.NET 程序设计的核心。
在 Visual Basic.NET程序设计中,对象中还可以包含头,手,腿,脚等部位,其中的每个部位又可以单独作为作为被研究的对象。在 Visual Basic.NET程序设计中,整个应用程序就是一个对象,应用程序中又包含着窗体(Form),命令按钮(Command),菜单(Menu)等对象。
类(Class)
在 Visual Basic.NET中,对象是由类创建的,因此对象可以说是类的具体实例,这就好比是蛋糕和做蛋糕的模具之间的关系。
各种不同的对象分属于各种不同的种类。同一类对象可能具有一些不同的特征(或是说同一类对象不一定具有完全相同的特性);具有某些相同的特性的对象,不一定是同一类对象。
参考资料来源:百度百科-VB
在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。
像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合。
有的时候,对于整数、小数、字符等基本类型数据的操作也必须要借助指针,一个典型的例子就是交换两个变量的值。
调用 swap() 函数时,将变量 a、b 的地址分别赋值给 p1、p2,这样 *p1、*p2 代表的就是变量 a、b 本身,交换 *p1、*p2 的值也就是交换 a、b 的值。
函数运行结束后虽然会将 p1、p2 销毁,但它对外部 a、b 造成的影响是“持久化”的,不会随着函数的结束而“恢复原样”。
需要注意的是临时变量 temp,它的作用特别重要,因为执行*p1 = *p2;语句后 a 的值会被 b 的值覆盖,如果不先将 a 的值保存起来以后就找不到了。
扩展资料:
用数组作函数参数:
数组是一系列数据的集合,无法通过参数将它们一次性传递到函数内部,如果希望在函数内部操作数组,必须传递数组指针。
参数 intArr 仅仅是一个数组指针,在函数内部无法通过这个指针获得数组长度,必须将数组长度作为函数参数传递到函数内部。
数组 nums 的每个元素都是整数,scanf() 在读取用户输入的整数时,要求给出存储它的内存的地址,nums+i就是第 i 个数组元素的地址。
int a=3;
int *p=&a;
这时p就是一个指针,它的值就是a在内存中地址,&是取地址的意思,
在函数调用中用了指针作形参,那么调用函数时候实参传递给函数的是参数的地址,函数在执行的过程中会根据这个传过来的地址去对那个变量进行运算。最后会把这个变量的值改变。
用引用也是用地址实现这种传递法。
不用指针变量,则函数在调用时会在内存另外一个地方再开启内存,传递过来的值交给了这个新开启的内存。函数在执行过程中则只对这部分新开启的内存变量操作,结束后不会返回值,
所以,指针变量其实就是通过地址来改变主函数中变量值