子函数通过传递指针参数来修改变量的值

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

子函数通过传递指针参数来修改变量的值

在C/C++语言中,通过调用子程序来修改变量的值的常用方法有:

(1)把该变量设置成全局变量。

(2)传递指针。

全局变量会破化程序的模块化,但是传递指针参数的方式需要很小心处理。下面简单讲下通过传递指针参数来修改变量值的原理:

如果变量a被声明为指针,那么变量a存放的是内存地址,例如:

int *a;

声明变量a为指针,但此时a既不是空指针,也不指向某个类型为int的空间地址,仅仅是声明而已。

可以通过如下操作给a赋值:

int *a,b;

b=1;

a=&b; //a的值赋成变量b的地址。

或者:

int *a;

a=new int; //申请一个类型为int的空间,其地址保存到变量a中。

*a=1; //a指向的类型为int的空间的值改成1

如果我们想输出a指向的空间的内容,可以如下操作:

cout<<*a;

而以下代码:

cout<

将会输出a本身的数值,也就是a指向的空间地址,而不是该空间的值。

申请空间的函数除了new,还有malloc。

当一个程序function_A运行时调用到另一个程序

function_B(类型1 变量B1,类型2 变量B2,...,类型n 变量Bn)

function_A中是如下调用function_B的:

function_B(变量A1,变量A2,...,变量An);

程序运行时会为function_B的变量B1,....,变量Bn分配存储空间,然后分别把他们的值赋成变量A1,...,变量An的值,那么当function_B运行结束返回function_A时,变量B1,...,变量Bn的空间会释放掉,而不会返回并且把function_A的变量A1,...,变量An的值修改成变量B1,...,变量Bn的值,即使他们是指针变量也如此,那么我们该如何通过指针传递的方式来修改参数的值呢?

我们来看下面一段代码1:

#include "iostream.h"

void function(int *b,int x){

*b=x;

}

main(){

int *a;

a=new int;

*a=1;

function(a,2);

cout<<*a;

}

输出结果将是2。

主函数通过调用function,把指针参数a的数值传递给了function,该数值是一个类型为int的内存空间地址,function通过操作*b=x把该地址存储的数值由1改成2,当返回到主函数后,a指向的地址存储的值会是function修改后的数值2。

以上程序如果不使用指针来实现,代码2:

#include "iostream.h"

void function(int b,int x){

b=x;

}

main(){

int a;

a=1;

function(a,2);

cout<

}

输出结果将会是1,因为子函数的变量b的值是不会传递给主函数的变量a的。

我们再看下面一段代码,代码3:

#include "iostream.h"

void function(int *b,int x){

int *c;

c=new int;

*c=x;

b=c;

}

main(){

int *a;

a=new int;

*a=1;

function(a,2);

cout<<*a;

}

输出结果将会是1,也就是指针a的内容并没有因为调用了function而改变:调用了function后,指针a的值将传递给function的指针变量b,但是在function运行期间,b的值又改变成了指针变量c,但是并没有改变到a指向的内存空间所保存的值。

对上面的代码作个小修改,代码4:

#include "iostream.h"

void function(int *b,int x){

int *c;

c=new int;

*c=x;

b=c;

*b=x;

}

main(){

int *a;

a=new int;

*a=1;

function(a,2);

cout<<*a;

}

输入结果将是1,和上面的代码一样不会改变指针a指向的值。虽然代码4和代码2的差别是代码4的子程序多了下面几行代码:

int *c;

c=new int;

*c=x;

b=c;

这几行代码将决定不会改变到指针a指向的数值,因为在子程序运行初期,虽然把主函数的指针变量a的值赋给了function的指针变量b,接下来又把指针变量b的值改成指针变量c的值,也就是b的值和c的值都是同一空间的地址,而不是a存储的空间地址了,*b=x 不会改变到a指向的空间的值。

分享

飞翔鸟2009-02-12 10:23:54[举报]

稍微改改就可以输出2啦

#include "iostream.h"

void function(int *&b,int x){

int *c;

c=new int;

*c=x;

b=c;

}

void main(){

int *a;

a=new int;

*a=1;

function(a,2);

cout<<*a<

}

相关文档
最新文档