目前我所了解的主要有四种参数传递:
class shu
{
public:
void Out( int tempa )
{
cout << "tempa值" << tempa << endl;
tempa ++;
cout << "tempa值" << tempa << endl;
}
};
int main(int argc, char **argv)
{
int a = 1;
shu sss;
sss .Out( a ) ;
cout << a << endl;//再一次输出a
system("pause");
return 0;
}
可以看出a在传入函数后实际上是进行了一次复制,所以目标a的值没有改变。
2.采用引用:能改变外部目标 a的值
class shu
{
public:
void Out( int &tempa )
{
cout << "tempa值" << tempa << endl;
tempa ++;
cout << "tempa值" << tempa << endl;
}
};
int main(int argc, char **argv)
{
int a = 1;
shu sss;
sss .Out( a ) ;
cout << a << endl;//再一次输出a
system("pause");
return 0;
}
可以看出目标a 的值改变了,引用相当于是直接把外部的参数拿过来了。
3.采用指针:能改变外部目标 a的值
class shu
{
public:
void Out( int * tempa )
{
cout << "tempa值" << *tempa << endl;
(*tempa) ++;
cout << "tempa值" << *tempa << endl;
}
};
int main(int argc, char **argv)
{
int a = 1;
shu sss;
sss .Out( &a ) ;
cout << a << endl;//再一次输出a
system("pause");
return 0;
}
可以看出经过out函数,a的值改变为2。这说明采用指针来传参可以改变目标a的值。
4.采用指针型引用:为指针和引用的结合。可以直接把外部的指针拿进去用,同时也可以改变该指针对应的值:
class shu
{
public:
void Out( int *&tempa )
{
cout << "tempa值" << *tempa << endl;
(*tempa )++;
cout << "tempa值" << *tempa << endl;
}
};
int main(int argc, char **argv)
{
int a = 1;
int *b = &a;
shu sss;
sss .Out( b ) ;
cout << a << endl;//再一次输出a
system("pause");
return 0;
}
可以看到 out函数直接把指针拿进去用了,改变了目标a 值。
综上所述:采用引用和指针型引用,在传参时不会造成参数的副本,可以直接把传入的参数拿来用。而值传递会造成副本。
指针传递虽然可以改变外部目标的值,但是指针在传入函数是也会造成副本。所以传参时有引用就没有副本,没有引用就
会产生副本。我感觉效率比较:值传递<指针传递<引用传递<指针型引用。
以上内容仅供参考,欢迎交流!
1.值传递 2.采用引用 3.采用指针 4.采用指针型引用
class shu
{
public:
void Out( int tempa )
{
cout << "tempa值" << tempa << endl;
tempa ++;
cout << "tempa值" << tempa << endl;
}
};
int main(int argc, char **argv)
{
int a = 1;
shu sss;
sss .Out( a ) ;
cout << a << endl;//再一次输出a
system("pause");
return 0;
}
可以看出a在传入函数后实际上是进行了一次复制,所以目标a的值没有改变。
2.采用引用:能改变外部目标 a的值
class shu
{
public:
void Out( int &tempa )
{
cout << "tempa值" << tempa << endl;
tempa ++;
cout << "tempa值" << tempa << endl;
}
};
int main(int argc, char **argv)
{
int a = 1;
shu sss;
sss .Out( a ) ;
cout << a << endl;//再一次输出a
system("pause");
return 0;
}
可以看出目标a 的值改变了,引用相当于是直接把外部的参数拿过来了。
3.采用指针:能改变外部目标 a的值
class shu
{
public:
void Out( int * tempa )
{
cout << "tempa值" << *tempa << endl;
(*tempa) ++;
cout << "tempa值" << *tempa << endl;
}
};
int main(int argc, char **argv)
{
int a = 1;
shu sss;
sss .Out( &a ) ;
cout << a << endl;//再一次输出a
system("pause");
return 0;
}
可以看出经过out函数,a的值改变为2。这说明采用指针来传参可以改变目标a的值。
4.采用指针型引用:为指针和引用的结合。可以直接把外部的指针拿进去用,同时也可以改变该指针对应的值:
class shu
{
public:
void Out( int *&tempa )
{
cout << "tempa值" << *tempa << endl;
(*tempa )++;
cout << "tempa值" << *tempa << endl;
}
};
int main(int argc, char **argv)
{
int a = 1;
int *b = &a;
shu sss;
sss .Out( b ) ;
cout << a << endl;//再一次输出a
system("pause");
return 0;
}
可以看到 out函数直接把指针拿进去用了,改变了目标a 值。
综上所述:采用引用和指针型引用,在传参时不会造成参数的副本,可以直接把传入的参数拿来用。而值传递会造成副本。
指针传递虽然可以改变外部目标的值,但是指针在传入函数是也会造成副本。所以传参时有引用就没有副本,没有引用就
会产生副本。我感觉效率比较:值传递<指针传递<引用传递<指针型引用。
以上内容仅供参考,欢迎交流!