C++教程(八)——指针
发布人:shili8
发布时间:2025-01-17 00:41
阅读次数:0
**C++ 教程 (八) —— 指针**
在 C++ 中,指针是非常重要的概念,它们允许你操作内存中的数据。指针是一种特殊类型的变量,它保存的是一个内存地址,而不是实际的值。在本教程中,我们将深入探讨指针的基本概念、使用方法和一些常见的应用。
###什么是指针?
在 C++ 中,指针是一个变量,它保存的是另一个变量或数据结构的内存地址。例如,如果你有一个整型变量 `x`,它占据了内存中的某个位置,你可以使用一个指针 `p` 来保存这个内存地址。
cppint x =10; // x 占据了内存中的某个位置int* p = &x; // p保存了 x 的内存地址
在上面的例子中,`&x` 表示取 `x` 的内存地址,而 `p` 就是保存这个内存地址的指针。
### 指针的基本操作#### 赋值和比较你可以使用赋值运算符 (`=`) 将一个指针赋给另一个指针。例如:
cppint x =10; int* p1 = &x; int* p2 = p1; // p2 现在保存了 x 的内存地址
你也可以使用比较运算符 (`==` 和 `!=`) 来比较两个指针是否相等。例如:
cppint x =10; int y =20; int* p1 = &x; int* p2 = &y; if (p1 == p2) { std::cout << "p1 和 p2 相等" << std::endl; } else { std::cout << "p1 和 p2 不相等" << std::endl; }
#### 指针的运算你可以使用加法和减法运算符来操作指针。例如:
cppint x =10; int* p = &x; *p =20; // 将20 赋值给 xstd::cout << "x 的值是:" << *p << std::endl; ++(*p); // 将 x 的值加一std::cout << "x 的值是:" << *p << std::endl;
#### 指针的解引用你可以使用解引用运算符 (`*`) 来获取指针所指向的变量的值。例如:
cppint x =10; int* p = &x; std::cout << "x 的值是:" << *p << std::endl;
### 指针和数组在 C++ 中,数组也是一个非常重要的概念,它们允许你存储一组相同类型的数据。指针和数组之间有着密切的关系。
#### 数组名为指针在 C++ 中,数组名实际上是一个指向数组首元素的指针。例如:
cppint arr[5] = {1,2,3,4,5}; std::cout << "arr 的值是:" << *arr << std::endl;
在上面的例子中,`arr` 是一个整型数组,它实际上是一个指向数组首元素的指针。
#### 指针和数组索引你可以使用指针来访问数组中的元素。例如:
cppint arr[5] = {1,2,3,4,5}; int* p = arr; std::cout << "arr 的值是:" << *p << std::endl; ++p; std::cout << "arr 的值是:" << *p << std::endl;
在上面的例子中,`p` 是一个指向数组首元素的指针,我们使用 `++p` 来访问数组中的下一个元素。
### 指针和函数在 C++ 中,函数也是一个非常重要的概念,它们允许你定义一段代码块来完成某个任务。指针和函数之间有着密切的关系。
#### 函数名为指针在 C++ 中,函数名实际上是一个指向函数体的指针。例如:
cppvoid myFunction() { std::cout << "Hello, World!" << std::endl; } int main() { void (*p)() = myFunction; // p 是一个指向 myFunction 的指针 p(); // 调用函数体 return0; }
在上面的例子中,`myFunction` 是一个函数,它实际上是一个指向函数体的指针。
#### 指针和函数参数你可以使用指针来传递函数参数。例如:
cppvoid myFunction(int* p) { std::cout << "p 的值是:" << *p << std::endl; } int main() { int x =10; int* px = &x; // px 是一个指向 x 的指针 myFunction(px); // 调用函数体,传递 px 作为参数 return0; }
在上面的例子中,我们使用指针 `px` 来传递变量 `x` 作为函数参数。
### 总结在本教程中,我们深入探讨了 C++ 中的指针概念、基本操作和一些常见的应用。我们学习了如何定义指针、赋值和比较指针、使用加法和减法运算符来操作指针、解引用指针等。我们还学习了如何使用指针来访问数组中的元素和函数体,以及如何传递指针作为函数参数。
### 参考资料* 《C++ Primer》第5 章:指针* 《Effective C++》第2 章:指针* 《Modern C++ Design》第3 章:指针