C++ 指针
C++ 指针
在本教程中,我们将通过示例了解 C++ 中的指针及其工作原理。
在C++中,指针是存储其他变量内存地址的变量。
C++ 中的地址
如果我们有一个变量 var 在我们的程序中,&var 会给我们它在内存中的地址。例如,
示例 1:在 C++ 中打印变量地址
#include <iostream>
using namespace std;
int main()
{
// declare variables
int var1 = 3;
int var2 = 24;
int var3 = 17;
// print address of var1
cout << "Address of var1: "<< &var1 << endl;
// print address of var2
cout << "Address of var2: " << &var2 << endl;
// print address of var3
cout << "Address of var3: " << &var3 << endl;
}
输出
Address of var1: 0x7fff5fbff8ac Address of var2: 0x7fff5fbff8a8 Address of var3: 0x7fff5fbff8a4
这里,0x
开头代表地址是十六进制形式。
请注意,第一个地址与第二个地址相差 4 个字节,第二个地址与第三个地址相差 4 个字节。
这是因为 int
的大小 变量在 64 位系统中为 4 个字节。
注意: 运行程序时可能不会得到相同的结果。
C++ 指针
如上所述,指针用于存储地址而不是值。
下面是我们如何声明指针。
int *pointVar;
在这里,我们声明了一个指针 pointVar int
输入。
我们也可以通过以下方式声明指针。
int* pointVar; // preferred syntax
我们再举一个声明指针的例子。
int* pointVar, p;
在这里,我们声明了一个指针 pointVar 和一个普通变量 p .
注意: *
在数据类型之后使用操作符来声明指针。
为指针分配地址
以下是我们如何为指针分配地址:
int* pointVar, var;
var = 5;
// assign address of var to pointVar pointer
pointVar = &var;
这里,5
分配给变量 var .并且,var的地址 分配给 pointVar 代码为 pointVar = &var
的指针 .
使用指针从地址中获取值
要获取指针指向的值,我们使用 *
操作员。例如:
int* pointVar, var;
var = 5;
// assign address of var to pointVar
pointVar = &var;
// access value pointed by pointVar
cout << *pointVar << endl; // Output: 5
在上面的代码中,var的地址被赋值给了pointVar .我们使用了 *pointVar
获取存储在该地址中的值。
当*
与指针一起使用,它被称为 dereference operator .它对指针进行操作,并给出存储在指针中的地址所指向的值。即*pointVar = var
.
注意:在 C++ 中, pointVar 和 *pointVar 完全不同。我们不能做像 *pointVar = &var;
这样的事情
示例 2:C++ 指针的工作
#include <iostream>
using namespace std;
int main() {
int var = 5;
// declare pointer variable
int* pointVar;
// store address of var
pointVar = &var;
// print value of var
cout << "var = " << var << endl;
// print address of var
cout << "Address of var (&var) = " << &var << endl
<< endl;
// print pointer pointVar
cout << "pointVar = " << pointVar << endl;
// print the content of the address pointVar points to
cout << "Content of the address pointed to by pointVar (*pointVar) = " << *pointVar << endl;
return 0;
}
输出
var = 5 Address of var (&var) = 0x61ff08 pointVar = 0x61ff08 Content of the address pointed to by pointVar (*pointVar) = 5<图>

指针指向的改变值
如果 pointVar 指向 var 的地址 ,我们可以改变 var 的值 通过使用 *pointVar .
例如,
int var = 5;
int* pointVar;
// assign address of var
pointVar = &var;
// change value at address pointVar
*pointVar = 1;
cout << var << endl; // Output: 1
这里,pointVar 和 &var
有相同的地址,var的值 *pointVar 时也会改变 变了。
示例 3:更改指针指向的值
#include <iostream>
using namespace std;
int main() {
int var = 5;
int* pointVar;
// store address of var
pointVar = &var;
// print var
cout << "var = " << var << endl;
// print *pointVar
cout << "*pointVar = " << *pointVar << endl
<< endl;
cout << "Changing value of var to 7:" << endl;
// change value of var to 7
var = 7;
// print var
cout << "var = " << var << endl;
// print *pointVar
cout << "*pointVar = " << *pointVar << endl
<< endl;
cout << "Changing value of *pointVar to 16:" << endl;
// change value of var to 16
*pointVar = 16;
// print var
cout << "var = " << var << endl;
// print *pointVar
cout << "*pointVar = " << *pointVar << endl;
return 0;
}
输出
var = 5 *pointVar = 5 Changing value of var to 7: var = 7 *pointVar = 7 Changing value of *pointVar to 16: var = 16 *pointVar = 16
使用指针时的常见错误
假设,我们想要一个指针 varPoint 指向 var 的地址 .那么,
int var, *varPoint;
// Wrong!
// varPoint is an address but var is not
varPoint = var;
// Wrong!
// &var is an address
// *varPoint is the value stored in &var
*varPoint = &var;
// Correct!
// varPoint is an address and so is &var
varPoint = &var;
// Correct!
// both *varPoint and var are values
*varPoint = var;
推荐读物 :
- 如何通过 void 指针使用泛型数据类型指针?
- 如何用指针表示数组?
- 如何在函数中使用指针?
- 如何在结构中使用指针?
C语言