c++指针知识笔记(自我总结)
需积分: 0 117 浏览量
更新于2023-04-03
1
收藏 22KB DOCX 举报
C++中的指针是编程语言的核心特性之一,它允许我们直接操作内存地址,实现高效的数据操作和复杂的程序设计。以下是对指针知识的详细说明:
1. **指针的声明和使用**
在C++中,`*`运算符用于声明指针变量。例如,在`int* p`中,`*`表示`p`是一个指针,`int`则是指针所指向的类型。`p`自身是一个`int`类型的指针。`&num`是获取变量`num`的地址并赋值给指针`p`。
2. **指针数组**
指针数组本质上是一个数组,其每个元素都是一个指针。在`test0()`函数中,`char* arry[2]`定义了一个包含两个元素的`char`指针数组,分别存储了字符串"ypy"和"hello"的首字符地址。通过`*(arry[i] + 1)`可以访问数组元素中指定位置的字符。
3. **数组和指针的关系**
数组的名称在大多数情况下可以被视为指向其首元素的指针。在`test1()`函数中,`arr`是数组名,表示数组首元素的地址,`&arr+1`则表示数组整个数组的地址加上数组元素的大小,不是下一个数组的地址。
4. **数组指针**
在`test2()`函数中,`int(*p)[5]`是一个指针,它指向一个包含5个`int`元素的数组。`*p`表示数组的首元素地址,`*p+2`表示第二个元素的地址,`*(*p+2)`则访问数组的第二个元素。
5. **二维数组和指针**
二维数组在内存中是连续排列的一维数组集合。在`test3()`函数中,`int(*p)[3]`是一个指向包含3个`int`元素的一维数组的指针,这表示二维数组`arr[2][3]`的第一个一维数组地址。`*(p+1)+1`是`arr[1][1]`的地址,`*(*(p+1)+1)`则是`arr[1][1]`的值。
6. **指针作为函数参数**
当需要在函数内部修改外部变量时,需要传递变量的地址,而不是它的值。在`setNum4_1_2()`函数中,`int* p`接收`num`的地址,然后`*p = 100;`修改了`num`的值。`change4_1()`函数展示了如何通过指针交换两个变量的值。
7. **数组作为函数参数**
当将一维数组作为函数参数传递时,实际上传递的是数组首元素的地址。因此,`outputIntArray()`函数中的`arr`实际上是一个指向数组首元素的指针,可以用来遍历和操作数组元素。
理解这些基本的C++指针概念对于编写高效的代码和解决复杂问题至关重要。指针能够提供对内存的直接访问,使得程序员可以创建动态数据结构、实现高级算法和更灵活的程序设计。然而,使用不当也可能导致内存泄漏或运行时错误,因此在使用指针时应格外小心。