C++ 指针
在 C++ 中,指针是存储其他变量的内存地址的变量。
C++ 中的地址
如果程序中有一个变量 var,&var 会告诉我们它在内存中的地址。
示例1:
#include <iostream>
using namespace std;
int main()
{
// 声明变量
int var1 = 10;
int var2 = 20;
int var3 = 5;
// 打印var1的地址
cout << "var1的地址: " << &var1 << endl;
// 打印var1的地址
cout << "var2的地址: " << &var2 << endl;
// 打印var2的地址
cout << "var3的地址: " << &var3 << endl;
}
结果:
这些地址是一个十六进制的数字, 每一个计算机都有自己的内存地址空间, 所以地址的值可能不同。 变量的地址值可能会在每次程序运行时发生变化。
C++ 指针
如上所述,指针用于存储地址而不是值。
声明指针
int *pointVar;(声明了一个 int 类型的指针 pointVar。)
/
int* pointVar;(首先语法)
int* pointVar, p;(声明了一个指针 pointVar 和一个普通变量 p。)
Note:运算*
符用在数据类型之后声明指针。
为指针分配地址
int* pointVar, var;
var = 5;
// 将 var 的地址分配给 pointVar 指针
pointVar = &var;
使用指针从地址中获取值
int* pointVar, var;
var = 5;
//将 var 的地址分配给 pointVar
pointVar = &var;
// 访问 pointVar 指向的值
cout << *pointVar << endl; // 输出: 5
上面的代码中,var的地址赋给了pointVar。使用 *pointVar 来获取存储在该地址中的值。
当 * 与指针一起使用时,它被称为取消引用运算符。它对指针进行操作,并给出指针中存储的地址指向的值。也就是说,*pointVar = var。
Note:在C++中,point Var和*point Var是完全不同的。不能做*point var=&var;
示例 2(C++ 指针的工作):
#include <iostream>
using namespace std;
int main() {
int var = 5;
// 声明指针变量
int* pointVar;
// var 的存储地址
pointVar = &var;
// 打印var的值
cout << "var = " << var << endl;
// 打印var地址
cout << "var (&var)的地址 = " << &var << endl
<< endl;
// 打印指针 pointVar
cout << "pointVar = " << pointVar << endl;
//打印地址pointVar指向的内容
cout << "pointVar(*pointVar) 指向的地址的内容= "<< *pointVar << endl;
return 0;
}
结果:
改变指针指向的值
如果 pointVar 指向 var 的地址,可以使用 *pointVar 来改变 var 的值。
int var = 5;
int* pointVar;
// 分配var的地址
pointVar = &var;
// 改变地址 pointVar 的值
*pointVar = 1;
cout << var << endl; // 输出: 1
pointVar 和 &var 有相同的地址,改变 *pointVar 时 var 的值也会改变。
示例3(改变指针指向的值):
#include <iostream>
using namespace std;
int main() {
int var = 5;
int* pointVar;
// var 的存储地址
pointVar = &var;
// 打印var
cout << "var = " << var << endl;
// 打印*pointVar
cout << "*pointVar = " << *pointVar << endl
<< endl;
cout << "将 var 的值更改为10:" << endl;
// 将 var 的值更改为 10
var =10;
// 打印var
cout << "var = " << var << endl;
// 打印*pointVar
cout << "*pointVar = " << *pointVar << endl
<< endl;
cout << "将 var 的值更改为20:" << endl;
// 将 var 的值更改为 20
*pointVar = 20;
// print var
cout << "var = " << var << endl;
// 打印*pointVar
cout << "*pointVar = " << *pointVar << endl;
return 0;
}
结果:
使用指针时的常见错误
int var, *varPoint;
// 错误!
//varPoint 是一个地址,但 var 不是
varPoint = var;
// 错误!
// &var 是一个地址
// *varPoint 是存储在 &var 中的值
*varPoint = &var;
// 正确!
// VarPoint是一个地址,&var也是
varPoint = &var;
// 正确!
//*varPoint 和 var 都是值
*varPoint = var;