C++数组指针

C++数组指针教程

C++ 中,数组 是用来保存同一种 类型 的一组数据的集合,同时,数组中的所有元素在内存中是连续存放的,也就是数组的每个元素的地址在内存中是连续的。

在 C++ 中,我们可以将数组名看成是一个 指针,它指向数组的第 1 个元素,也就是索引为 0 的元素,在 C++ 中,我们将第 1 个元素的地址称为数组的首地址。

注意,我们可以将数组名看成是指针,但其实它们并不完全等价,因为数组名其实是一个 常量,不可以被修改,而指针时可以移动的,即是一个 变量

C++数组指针详解

语法

int arr[10];

说明

我们定义了一个含有 10 个元素的数组,数组名为 arr,我们可以认为 arr 是一个指针,其指向了数组的第一个元素。

案例

C++数组指针

C++ 的数组名可以看成指针

#include <iostream> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; int arr[3] = {1, 3, 4}; for(int i = 0; i < 3; i++) { cout << "arr[" << i << "] = " << arr[i] << endl; } return 0; }

程序运行后,控制台输出如下图所示:

08_C数组指针.png

我们首先,定义了一个 int 类型 的数组,该数组有三个元素,接着,我们使用了 for 循环 遍历了这三个元素,既然,数组名可以当做指针,并且数组元素在内存里是连续的。

因此,我们就可以使用数组名来遍历数组元素,我们修改程序如下:

#include <iostream> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; int arr[3] = {1, 3, 4}; for(int i = 0; i < 3; i++) { cout << "arr[" << i << "] = " << *(arr+i) << endl; } return 0; }

程序运行后,控制台输出如下图所示:

09_C数组指针.png

这次,我们使用了数组名来遍历了数组的每一个元素,我们将数组名当成了指针,并且不停的将指针往后偏移,得到数组元素的地址,再通过 * 符取得数组元素的值。

其中,在 *(arr+i) 这个表达式中,arr 是数组名,指向数组的第 0 个元素,表示数组首地址, arr+i 指向数组的第 i 个元素,*(arr+i) 表示取第 i 个元素的数据,它等价于 arr[i]。

C++数组指针

使用指针指向数组名

#include <iostream> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; int arr[3] = {1, 2, 3}; int *pArr = arr; for(int i = 0; i < 3; i++) { cout << "pArr[" << i << "] = " << *(pArr+i) << endl; } return 0; }

程序运行后,控制台输出如下图所示:

10_C数组指针.png

我们直接定义了一个指针,其指向了数组名,接着,我们就直接可以通过指针的移动来访问数组中的元素。

C++数组指针

使用指针指向数组名

#include <iostream> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; int arr[3] = {1024, 501, 109}; int *pArr = arr; for(int i = 0; i < 3; i++) { cout << "pArr[" << i << "] = " << *pArr++ << endl; } return 0; }

程序运行后,控制台输出如下图所示:

11_C数组指针.png

我们使用了指针的自增加上 for 循环,实现了访问数组的所有元素,这里,*pArr++ 这种写法,是先使用 *pArr 取出数组的第一个元素,接着,再次执行 pArr++,就是将指针移向数组的下一个元素。

C++数组指针总结

在 C++ 中,我们可以将数组名看成是一个指针,它指向数组的第 1 个元素,也就是索引为 0 的元素,在 C++ 中,我们将第 1 个元素的地址称为数组的首地址。

注意,我们可以将数组名看成是指针,但其实它们并不完全等价,因为数组名其实是一个常量,不可以被修改,而指针时可以移动的,即是一个变量。