C++ 指针

创建指针

您从上一章中了解到,我们可以通过使用 & 运算符获得变量的内存地址

实例
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main() {
  5. string food = "Pizza";
  6. cout << food << "\n";
  7. cout << &food << "\n";
  8. return 0;
  9. }

然而,指针是一个将内存地址存储为其值的变量。

指针变量指向同一类型的数据类型(如 intstring),并使用 * 运算符创建。正在使用的变量的地址被分配给指针:

实例
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main() {
  5. string food = "Pizza"; // A string variable
  6. string* ptr = &food; // A pointer variable that stores the address of food
  7. // Output the value of food
  8. cout << food << "\n";
  9. // Output the memory address of food
  10. cout << &food << "\n";
  11. // Output the memory address of food with the pointer
  12. cout << ptr << "\n";
  13. return 0;
  14. }
实例解释

使用星号 *(string* ptr) 创建一个名为 ptr 的指针变量,该变量指向一个字符串变量。请注意,指针的类型必须与正在使用的变量的类型相匹配。

使用 & 运算符存储名为 food 的变量的内存地址,并将其分配给指针。

现在,ptr 保存 food 的内存地址值。

提示:有三种方法可以声明指针变量,但首选第一种方法:

  1. string* mystring; // Preferred
  2. string *mystring;
  3. string * mystring;

解引用

获取内存地址和值

在上一页的示例中,我们使用指针变量获取变量的内存地址(与 & 引用运算符一起使用)。但是,也可以使用 * 运算符(解引用运算符)使用指针来获取变量的值:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main() {
  5. string food = "Pizza"; // Variable declaration
  6. string* ptr = &food; // Pointer declaration
  7. // Reference: Output the memory address of food with the pointer
  8. cout << ptr << "\n";
  9. // Dereference: Output the value of food with the pointer
  10. cout << *ptr << "\n";
  11. return 0;
  12. }

请注意*符号在这里可能会令人困惑,因为它在我们的代码中做了两件不同的事情:

  • 在声明(string* ptr)中使用时,它会创建一个 指针变量
  • 当不是在声明时,它充当 解引用运算符

修改指针

还可以更改指针的值。但请注意,这也会改变原始变量的值:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main() {
  5. string food = "Pizza";
  6. string* ptr = &food;
  7. // Output the value of food
  8. cout << food << "\n";
  9. // Output the memory address of food
  10. cout << &food << "\n";
  11. // Access the memory address of food and output its value
  12. cout << *ptr << "\n";
  13. // Change the value of the pointer
  14. *ptr = "Hamburger";
  15. // Output the new value of the pointer
  16. cout << *ptr << "\n";
  17. // Output the new value of the food variable
  18. cout << food << "\n";
  19. return 0;
  20. }