27 指针与数组的关系

C++完整教程

在上一篇中,我们讨论了指针与引用的定义与使用。今天我们将深入探讨指针与数组之间的关系。理解这一关系对于我们在C++中处理数据结构和动态内存管理非常重要。

数组的本质

首先,我们需要理解“数组”在C++中的本质。数组是一种固定大小的、同类型数据的集合。比如,定义一个整型数组:

1
int arr[5] = {1, 2, 3, 4, 5};

在这个例子中,arr是一个包含5个整型元素的数组。数组的元素在内存中是连续存储的,这使得我们可以使用指针来访问它们。

数组名的指针特性

在C++中,数组名本身就是指向数组首元素的指针。因此,对于数组arrarr实际上等价于&arr[0]。这意味着我们可以使用指针来直接操作数组元素。

示例:指针与数组

看看以下代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;

int main() {
int arr[5] = {10, 20, 30, 40, 50};
int* p = arr; // p指向arr的首元素,即arr[0]

// 访问数组元素
cout << "通过指针访问数组元素:" << endl;
for (int i = 0; i < 5; i++) {
cout << "arr[" << i << "] = " << *(p + i) << endl; // 使用指针加偏移访问
}

return 0;
}

在这个示例中,我们定义了一个整型数组arr,并使用指针p指向arr的首元素。通过指针p,我们能通过*(p + i)语法访问数组的每一个元素。

数组与指针的运算

指针不仅可以用于访问数组元素,还可以进行指针运算。由于数组的内存是连续的,我们能够计算出数组元素之间的位置。比如:

  • p + 1指向arr[1]
  • p + 2指向arr[2]

示例:指针运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;

int main() {
int arr[3] = {100, 200, 300};
int* p = arr;

cout << "数组的元素:" << endl;
for (int i = 0; i < 3; i++) {
cout << "arr[" << i << "] = " << *(p + i) << endl; // 通过指针访问
}

// 指针运算示例
p++; // p现在指向arr[1]
cout << "p指向的当前位置:" << *p << endl; // 输出200

return 0;
}

在这个例子中,初始时p指向数组的首元素。在执行p++后,p指向数组的下一个元素。

二维数组与指针

不仅一维数组,二维数组也是指针的一个非常重要的应用。二维数组可以被看作是数组的数组。

示例:二维数组与指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;

int main() {
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
int (*p)[3] = arr; // p是指向包含3个整数数组的指针

cout << "二维数组的元素:" << endl;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << "arr[" << i << "][" << j << "] = " << p[i][j] << endl; // 使用指针访问
}
}

return 0;
}

在这里,p是一个指向包含3个整型的数组的指针。通过p[i][j]的方式可以访问二维数组中的元素。

结论

在C++中,指针与数组的关系密不可分,掌握了这一关系可以使我们更有效地管理内存和操控数据结构。我们通过引用和指针轻松地操作数组和数组元素,利用指针运算访问数据。

在下一篇中,我们将讨论指针与引用之引用的概念,进一步深入指针与引用的世界,期待你的继续学习!

27 指针与数组的关系

https://zglg.work/c-plusplus-zero/27/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-24

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论