关于C++的指针和引用问题,查看注释部分,跑一下就知道了
#include <iostream>
#include <cstring>
#include <string>
inline void charParam (char a){ // 传值
printf("charParam (char a) = %p\n", (void *)&a); // 0x7ffe694718ec
a = '6'; // 传值改变的是副本
}
inline void charParam (char *a){ // 传递的是地址
printf("charParam (char *a) = %p\n", (void *)&a); // 0x7ffe694718e8
*a = '6'; // 地址影响指向的内容
}
inline void charParamPre (char &a){ // 传递的是引用
printf("charParam (char *a) = %p\n", (void *)&a); // 0x7ffe6947190f
a = '2'; // 引用影响指向的内容
}
int main ()
{
char a = '1';
printf("&char = %p\n", &a); // &char = 0x7ffe6947190f
printf("&char = %p\n", (void *)&a); // &char = 0x7ffe6947190f
charParam(a);
printf("%c--------------\n", a);
charParam(&a);
printf("%c--------------\n", a);
charParamPre(a);
printf("%c--------------\n", a);
char *b;//b是指针变量,其只能指向一块内存,它就如同“指针”一样指向了一个方向,a和b共享内存
printf("charParam (char *b) = %p\n", (void *)&b);
b=&a;//指针赋值
printf("charParam (char *b) = %p\n", (void *)&b);
printf("%c--------------\n", a+3);
a++;
printf("%c--------------\n", *b);
*b='1';
printf("%c--------------\n", *b);
char c='2';
*b=c;//指针又指向了c 和b=&c等价的
// b=&c;
printf("%c--------------\n", a);//a不变
printf("%c--------------\n", *b);
}
注意传引用的时候,指针指向的是同一个内存空间,故若形参做了改变必然影响到实参,而实参做了改变也会影响到形参。