用指针变量作为函数参数, 在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化依然保留下来,这样就实现了”通过调用函数使变量的值发生了变化,在主调函数(如main函数)中使用这些改变了值”的目的.
为什么用指针变量作为函数参数就可以?
不用指针变量, 实参 值传递 的方式单向传到 形参, 那么只改变调用函数里的值,没有回传到实参来,
那么,用了指针变量, 值是怎么到实参来的?
谭浩强 的第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 个数组元素的地址。
用指针变量作为函数参数
在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过一...
“指针变量作为函数参数的作用:将一个变量的地址传送到另一个函数中...
注意到函数的参数是函数对外的接口,相当于函数的输入,一个自然的想法是将a当成参数传递给bar。但这种情况下传递给bar的其实是a的一个拷贝,是与a独立的一个变量,尽管二者的值相等。在bar里修改这个拷贝的变量对a没有任何影响。一个解决办法便是通过传递a的地址(即指向a的指针)来代替直接传递a。...
二维数组使用指针变量做函数参数是什么意思? 在什么情况下,函数参数才...
如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,行数可以指定也可以不指定。因为函数调用时传递的是一个指针,它指向由行向量够成的一维数组。所以如果定义一个函数,参数二维数组,那么至少要指定列数,比如:void p (int a[2][3])\/\/正确void p (int a[][3])\/...
c语言求解 指针变量作为函数参数为什么用void 定义而且不用返回值就能...
这个很容易理解,指针变量保存的是地址信息,*p这个是取p指针保存的地址里面的值,更改的也是保持的地址里面的值。而函数中传递的是变量的拷贝,比如指针传递的就是他保存的地址 如果在函数中对他保存的地址改掉,那么是不影响主函数中的变量的 错误的原因是scanf中是用英文的逗号,而你输入的是中文的逗...
指针与函数:指针作为函数参数与返回值的应用
1. 指针作为函数参数通过将指针作为函数参数,可以直接修改实参数据,节省内存并提高执行效率。特别是对于大型数据结构,传递指针而非值或拷贝更为有效。例如,传递数组指针时,函数能直接操作数组内容,无需复制。2. 指针作为函数返回值局部变量指针:需谨慎,因为局部变量在函数结束时会消失,可能导致无效...
指针变量能只能作为函数的形参不可以作函数的实参对还是错
错,指针变量既可以作为函数的形参,也可以作函数的实参。当数组名作函数的参数时,传递到是数组的起始地址,形参是用来接受从实参传递过来的实参数组的地址的。因此,形参应该是一个地址变量(只有指针才能存放地址)。数组名就是数组的首地址,实参向形参传递数组名实际上就是传送数组的地址,形参得到该...
EDUCoder编程实训题解(11.指针一 )
解题程序一(指针)输入示例:1 2 3 4 5 6 7 8 9 10 11 12 输出示例:1 2 3 4 5 6 7 8 9 10 11 12 任务描述:对输入的两个整数a,b,用指针变量作为函数参数,交换a和b的值。解题程序 任务描述:有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子...
C语言 指针做函数参数 的优点
何时用指针,何时用拷贝。当传的参数是一个结构体,而这个结构体比较大,这时最好用指针,因为如果用拷贝的话,单单花在拷贝的时间就要浪费很多,而如果这个函数经常被调用,那么这效率问题就出现了。你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return ...
C语言指针作函数参数时的返回问题
首先,弄懂函数参数都是靠值传递。指针也是。进入函数后,函数创建几个空间给形参,再把实参数值拷过来。退出函数时,把形参空间释放,则影响不到实参。这就是值传递。swap(int *p1,int *p2)函数首先创建两个空间,是指针,再把实参复制过来,即p1=pointer_1=&a,p2=pointer_2=&b,改变p1,p2就分别...
C语言中指针变量作为函数参数和一般变量作为函数参数的区别
在函数声明和定义时Fun(int p1,int p2)是不是表示它的参数是两个int型的整数。Fun(int* p1,int* p2)则使表示它的参数是两个指针类型的。定义和声明时的变量只是代替符,其它的运算符号与类型符号加起来才是参数类型。你如果觉得不好理解,那么在写的时候就把int 和*放在一起(int*),这就...