值传递
一般程序中我们经常 需要 修改 2个形参的内容。
比如
memcpy(dst,src,size)
strcpy(dst,src,size)
strstr(dst,src,size)
需要把src 的内容 赋值给dst+x ,然后把修改后dst的值,反映到函数外部。
以下就是2种方法,来修改 输入的形参 内容。
- 引用传值
- 地址传值
当然你还 可以使用
全局变量
- 返回
容器
vector - 使用
heap
(出来后再释放)
以上方式,本质上差别不大。
golang中可以返回多个参数。本质上也是返回 多个参数的容器而已。
void swap(int &a, int &b)//引用传值
{
int temp = 0;
temp = a;
a = b;
b = temp;
}
void swap1(int &a, int &b)//异或 是来打酱油的,与主题无关
{
a = a^b;
b = b^a;
a = a^b;
}
void swap2(int *a, int *b)//地址传值
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 20;
int b = 30;
swap(a,b);// 方案1: 引用传值
swap1(a,b);//方案1:还是引用传值, 不过 用 异或(XOR:相同为0,不同为1) a= a^b; b = b^a; a=a^b;
int *m = &a;
int *n = &b;
swap2(m,n);// 方案2: 地址传值 //也可以直接 这么写 swap2(&a,&b);
printf("%d, %d \n", a, b);
return 0;
}