指针是指向变量的地址,b是a的指针,指向a的地址。只要修改*b的值,a的值也跟着改变。
void Demo::main()
{
int a = 2;
int *b = &a;
CCLOG("a : %d", a); // 2
CCLOG("*b : %d", *b); // 2
*b = 3;
CCLOG("a : %d", a); // 3
CCLOG("*b : %d", *b); // 3
}
引用是给a变量取了一个新名字b,b是a的引用,只要修改b的值,a的值也跟着改变。
void Demo::main()
{
int a = 2;
int &b = a;
int c = a;
CCLOG("a : %d", a); // 2
CCLOG("b : %d", b); // 2
CCLOG("c : %d", c); // 2
b = 3;
CCLOG("a : %d", a); // 3
CCLOG("b : %d", b); // 3
CCLOG("c : %d", c); // 2
}
函数传入普通参数,不会改变main中a,b的地址,也就是不会改变a,b的值。
void Demo::fun(int a, int b)
{
int c = 0;
c = a;
a = b;
b = c;
}
void Demo::main()
{
int a = 1;
int b = 2;
CCLOG("a : %d", a); // 1
CCLOG("b : %d", b); // 2
fun(a, b);
CCLOG("a : %d", a); // 1
CCLOG("b : %d", b); // 2
}
函数传入指针参数,即地址。函数中a,b的交换是地址的交换。最后main中的a,b的值也就改变了。
void Demo::fun(int *a, int *b)
{
int c = 0;
c = *a;
*a = *b;
*b = c;
}
void Demo::main()
{
int a = 1;
int b = 2;
CCLOG("a : %d", a); // 1
CCLOG("b : %d", b); // 2
fun(&a, &b);
CCLOG("a : %d", a); // 2
CCLOG("b : %d", b); // 1
}
函数传入引用参数,fun函数中的a,b地址与main中的地址是一样的,如果函数中的a,b值改变的,那么main中的a,b的值也跟着改变。
void Demo::fun(int &a, int &b)
{
int c = 0;
c = a;
a = b;
b = c;
}
void Demo::main()
{
int a = 1;
int b = 2;
CCLOG("a : %d", a); // 1
CCLOG("b : %d", b); // 2
fun(a, b);
CCLOG("a : %d", a); // 2
CCLOG("b : %d", b); // 1
}