`
pleasetojava
  • 浏览: 698259 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

调用函数按值传递还是使用地址?

 
阅读更多

最近特别爱使用调用函数,不晓得是不是对,但是用了就用了,毕竟研究的东西多点,没有坏处。

调用函数,可以传值也可以通过通过地址的使用,传值和指针、引用我觉得作用是一样的,虽然本质不同,一般要改变值的时候就可以考虑用指针和引用。具体可以参考我的其他的文章。

这里说说按值传递的本质,按值传递的时候传入调用函数的不是值的本身,而是一个副本,也就是说是在调用函数分配的地址上面使用副本的值,哪怕在副本的值改变了,传入的值的原值是不变的,除非用return赋值。

看例程:

#include <iostream>

using namespace std;

typedef struct ill{

int i;
char *p;
}sill;

void print(sill );

int main(void)
{

sill a={100,"asdf"};
print(a);
return 1;

}

void print(sill a )
{
cout<<"i="<<a.i<<endl;
cout<<"p="<<a.p<<endl;

}

这个就是典型的按值传递,调用函数里面的a跟main中的a是不在一个地址上的,呵呵,如果这个都不晓得,u can start again!

再来看看改变后面的a的结果:

#include <iostream>

using namespace std;

typedef struct ill{

int i;
char *p;
}sill;

void print(sill );

int main(void)
{

sill a={100,"asdf"};
print(a);
printf("a.i=%d\n",a.i);
return 1;

}

void print(sill a )
{
a.i+=100;
cout<<"i="<<a.i<<endl;
cout<<"p="<<a.p<<endl;

}

运行就晓得没有变结果的。

最后总结陈词:

使用引用参数和指针的主要原因有两个:

1,程序员可以通过函数调用来改变数据对象;

2,通过传递引用而不是整个数据对象可以提高程序的运行速度。

还有我一直是把引用看成指针用的,虽然他们使用时候有些区别,或者说引用可能更加简单。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics