如何通过函数调用得到n个要改变的值(摘抄自谭浩强C语言)
2014-07-28 10:57
330 查看
如果想通过函数调用得到n个要改变的值,可以:
1、在主调函数中设n个变量,用n个指针变量指向它们;
2、然后将指针变量作实参,将这n个变量的地址传给所调用的函数的形参;
3、通过形参指针变量,改变该n个变量的值;
4、主调函数中就可以使用这些改变了值的变量。
程序举例详见C程序设计(谭浩强)226-229页
想要通过函数调用交换两个数据值得正确程序:
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
上面程序的理解是,通过调换指针所指向的变量值,达到实参中指向地址中的变量值的调换,最终达到变换目的
错误程序如下:
void swap(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}
程序的意图是,通过交换实参指针pointer_1和指针pointer_2的值,使其达到交换的目的
但存在问题,当在调用函数中交换形参指针p1和p2的值后,不能讲变化后的形参传递给实参,故不能达到实参指针变量交换的目的
C语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参数也要遵循这一规则。不可能通过调用函数来改变实参指针变量的值,但可以改变实参指针变量所指变量的值。
1、在主调函数中设n个变量,用n个指针变量指向它们;
2、然后将指针变量作实参,将这n个变量的地址传给所调用的函数的形参;
3、通过形参指针变量,改变该n个变量的值;
4、主调函数中就可以使用这些改变了值的变量。
程序举例详见C程序设计(谭浩强)226-229页
想要通过函数调用交换两个数据值得正确程序:
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
上面程序的理解是,通过调换指针所指向的变量值,达到实参中指向地址中的变量值的调换,最终达到变换目的
错误程序如下:
void swap(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}
程序的意图是,通过交换实参指针pointer_1和指针pointer_2的值,使其达到交换的目的
但存在问题,当在调用函数中交换形参指针p1和p2的值后,不能讲变化后的形参传递给实参,故不能达到实参指针变量交换的目的
C语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参数也要遵循这一规则。不可能通过调用函数来改变实参指针变量的值,但可以改变实参指针变量所指变量的值。
相关文章推荐
- linux下C语言如何得到调用我的函数的文件名和行号
- linux下C语言如何得到调用我的函数的文件名和行号
- 如何通过C#调用OpenCV函数(自制OpenCV的c++ dll文件)
- 如何在QT中实现C语言中调用C++的函数
- C语言中,如何通过函数来改变一个变量的值
- java通过JNI调用C语言写的函数,能提高运行效率吗?
- 如何在C语言中调用C++编写的DLL中的函数
- 如何通过JNI在Java中调用C库函数
- C语言如何跨文件调用函数定义中声明的变量
- C语言如何跨文件调用函数定义中声明的变量
- 如果改变了形参数组的值 从而在调用函数期间 形参数组就和实参数组共占同一段内存单元 为什么形参数组从实参数组那里得到起始地址后 请问各位C语言高手:当用数组名作函数参数时 也就该变了实参数组的值
- C语言可执行程序如何通过运行直接调用
- JNI学习--通过Java应用调用C语言的函数打印hello,world
- C语言一个源文件如何调用另一个源文件里的函数
- 如何通过变量去调用对应的函数
- 如何通过DB link进行远程过程或函数调用
- 用GetprocAddress得到地址后该如何调用这个函数
- C语言学习之 通过指向函数的指针 实现函数的调用
- C语言如何调用 memcpy 函数 实现内存拷贝
- 如何通过变量去调用对应的函数