最近特别爱使用调用函数,不晓得是不是对,但是用了就用了,毕竟研究的东西多点,没有坏处。
调用函数,可以传值也可以通过通过地址的使用,传值和指针、引用我觉得作用是一样的,虽然本质不同,一般要改变值的时候就可以考虑用指针和引用。具体可以参考我的其他的文章。
这里说说按值传递的本质,按值传递的时候传入调用函数的不是值的本身,而是一个副本,也就是说是在调用函数分配的地址上面使用副本的值,哪怕在副本的值改变了,传入的值的原值是不变的,除非用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,通过传递引用而不是整个数据对象可以提高程序的运行速度。
还有我一直是把引用看成指针用的,虽然他们使用时候有些区别,或者说引用可能更加简单。