#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
void func(int a,int b)
{
printf("a=%d,b=%d",a,b);
}
int main()
{
char i1=12;
char i2=30;
func(a,b);
return 0;
}
每当调用func()函数时,栈里出现a,b;
当函数调用结束时,栈里面的a,b就被清理
若使用引用:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
void func(int &a,int &b)
{
printf("a=%d,b=%d",a,b);
}
int main()
{
int i1=12;
int i2=30;
func(a,b);
return 0;
}
当使用引用时,在func()函数的堆栈里不申请空间,直接对main函数的空间进行赋值操作。
引用作为函数参数的操作,没有入栈出栈的操作,效率更高。
但是引用也会导致主函数里变量的数值变化。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
void func(int &a,int &b)
{
a=11;
b=10;
}
int main()
{
int i1=12;
int i2=30;
func(i1,i2);
printf("i1=%d,i2=%d",i1,i2);
return 0;
}
导致原函数里的i1,i2.改编为11和10;
但是,如果你既想通过引用加快速度,又不想main栈里的数据被改变。就可以选择, 常量引用(const)
这样的话,main函数里的变量就被编译器视为常量。
常量是无法被更改的。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
void func(const int &a,const int &b)//常量引用
{
}
int main()
{
int i1=12;
int i2=30;
func(i1,i2);
printf("i1=%d,i2=%d",i1,i2);
return 0;
}