引用:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
int main(){
int a = 1;
int& b = a;// 引用一个引用变量,别名的别名
cout<<"a:address->" <<&a<< endl;
cout<<"b:address->" <<&b<< endl;
a = 2;
cout<<a<<endl;
b = 3;
cout<<a<<endl;
int& c = b;
cout<<a<<endl;
c = 4;
cout<<a<<endl;
}
结果
a:address->0x7ffeefbe675c
b:address->0x7ffeefbe675c
2
3
3
4
指针传参
void change(int *a,int *c,int *e){
printf("%p\n",a);
printf("%p\n",c);
printf("%p\n",e);
int *b =a;
*b=3;
int *d;
d=c;
*d=4;
*e=5;
}
int main(){
int i=0,j=0,k=0;
change(&i,&j,&k);
printf("i=%d,j=%d,k=%d\n",i,j,k);
return 0;
}
结果
0x7ffe057626fc
0x7ffe05762700
0x7ffe05762704
i=3,j=4,k=5
引用传参
void change(int &a, int &b,int &c){
printf("%p\n",&a);
printf("%p\n",&b);
printf("%p\n",&c);
a=3;
b=4;
c=5;
}
int main(){
int i=0,j=0,k=0;
change(i,j,k);
printf("i=%d,j=%d,k=%d\n",i,j,k);
return 0;
}
结果
0x7ffeeb281758
0x7ffeeb281754
0x7ffeeb281750
i=3,j=4,k=5
函数指针
int max(int x, int y)
{
return x > y ? x : y;
}
int main(void)
{
/* p 是函数指针 */
int (* p)(int, int) = & max; // &可以省略
int a, b, c, d;
printf("请输入三个数字:");
scanf("%d %d %d", & a, & b, & c);
/* 与直接调用函数等价,d = max(max(a, b), c) */
d = p(p(a, b), c);
printf("最大的数字是: %d\n", d);
return 0;
}
// 回调函数
void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
for (size_t i=0; i<arraySize; i++)
array[i] = getNextValue();
}
// 获取随机值
int getNextRandomValue(void)
{
return rand();
}
int main(void)
{
int myarray[10];
populate_array(myarray, 10, getNextRandomValue);
for(int i = 0; i < 10; i++) {
printf("%d ", myarray[i]);
}
printf("\n");
return 0;
}
1.【值传递】如果形参为非引用的传值方式,则生成局部临时变量接收实参的值
值传递的方式无法实现交换,因为传参时对于参数left和right拷贝一临时副本,交换的是副本值,因为其是临时变量函数退出,变量销毁,并不会影响外部left和right的值。
void Swap (int left, int right)
int temp = left;
left = right ;
right = temp ;
}
2.【引用传递】如果形参为引用类型,则形参是实参的别名。
使用引用的话,不做临时拷贝,&的使用说明此处只是原参数的另一个名字而已,所以修改时直接在原参数的基础上修改变量值,减少了复制的开销,加快程序执行效率。
void Swap (int& left, int& right)
{
int temp = left;
right = left ;
left = temp ;
}
3.【指针传递】
传入的是地址,因为地址是唯一的,所以指针通过地址的访问进而可修改其内容。
void Swap (int* pLeft, int* pRight)
{
int temp = *pLeft;
*pLeft = *pRight;
*pRight = temp;
}
网友评论