// testV-1.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
void swap(int a, int b); //值传递 , 形参也有地址
void swap1(int* a, int* b); // 地址传递
void swap2(int& a, int& b); //引用传递, 实参就是a,b. 形参是 &a, &b
void swap3(int* a, int* b);
int main() {
cout << ("Hello World!\n");
int a = 3;
int b = 4;
cout << "bef swap, add of a &a = " << &a << endl; //内存地址随机分配
cout << "bef swap, val of a = " << a << endl;
swap(a, b);
cout << ("值传递后\n");
cout << "aft swap, add of a &a = " << &a << endl; //地址随机分配
cout << "aft swap, val of a = " << a << endl; //不会改变原有的值
cout << "---------------------------------" << endl;
a = 3;
b = 4;
cout << "bef swap, add of a &a = " << &a << endl;
cout << "bef swap, val of a = " << a << endl;
swap1(&a, &b); //传递的是地址, * 是取值符号, &是取址操作 *a=&b 传递地址
cout << "地址传递后" << endl;
cout << "aft swap, add of a &a = " << &a << endl;
cout << "aft swap, val of a = " << a << endl;
cout << "---------------------------------" << endl;
a = 3;
b = 4;
cout << "bef swap, add of a &a = " << &a << endl;
cout << "bef swap, val of a = " << a << endl;
//swap(a,b);
swap2(a, b); //传递的是引用, &a=a;
cout << "引用传递后\n";
cout << "aft swap, add of a &a = " << &a << endl;
cout << "aft swap, val of a = " << a << endl;
cout << "---------------------------------" << endl;
a = 3;
b = 4;
cout << "bef swap, add of a &a = " << &a << endl;
cout << "bef swap, val of a = " << a << endl;
swap3(&a, &b);
cout << "地址互换后\n";
cout << "aft swap, add of a &a = " << &a << endl;
cout << "aft swap, val of a = " << a << endl;
cout << "---------------------------------" << endl;
return 0;
}
// pass by value
void swap(int a, int b) {
cout << " 值传递 a1=a" << endl;
int temp = a;
a = b;
b = temp;
}
// pass by address
void swap1(int* a1, int *b1) { //地址传递过来
cout << "地址传递 int *a1 ,a1=&a ; a1表示指针, *a1才是值" << endl;
cout << "按地址传递过来的的 *a1: " << *a1 << endl; //3 , 这不是指针啊
cout << "按地址传递过来的 a1: " << a1 << endl; //地址
int temp = *a1; //交换值, 地址
*a1 = *b1;
*b1 = temp;
}
// pass by reference
void swap2(int& a, int& b) { //
cout << "引用传递 int@ a1, a1=a, a1就是值,指向a" << endl;
int temp = a; //只有c++里有引用, 这个是直接操作原始数据, 引用不是数据类型, 不会被分配内存
a = b;
b = temp;
}
// pass by value ?
void swap3(int* a, int *b) {
cout << "地址传递 int *a1 , a1=&a 交换的是地址, 所以值不变 ,打印过程: print (a), 找到a对应的地址,地址里存着值" << endl;
int* temp = a; ///a是地址, 结果是形参地址互换,
a = b;
b = temp;
}