第五章:C++中的数组与指针关系

简介: 第五章:C++中的数组与指针关系

第五章:C++中的数组与指针关系

C++中的数组与指针关系

在C++中,数组和指针之间有着密切的关系。数组名本身就是一个指向数组首元素的指针,而指针可以用来访问和操作数组元素。本文将深入探讨C++中数组与指针之间的关系,包括指针与一维数组、二维数组之间的转换,并结合丰富的代码示例和实际案例来帮助您更好地理解这个关系。

数组与指针

在C++中,数组名即代表一个指向数组首元素的指针。使用指针可以访问数组元素或进行其他操作。

以下是一个简单的示例,演示了指针如何与一维数组交互:

int numbers[5] = {2, 4, 6, 8, 10};
int* ptr = numbers;
cout << "第一个元素:" << *ptr << endl; // 输出第一个元素:2
cout << "第三个元素:" << *(ptr + 2) << endl; // 输出第三个元素:6

上述代码中,我们创建了一个整数数组numbers并初始化它。然后,声明了一个指向numbers数组首元素的指针ptr。通过*ptr我们可以获取到指针所指向的元素值,通过*(ptr + 2)我们可以获取到指针指向的元素偏移2的值。

我们还可以使用指针来遍历整个数组:

int* ptr = numbers;
for (int i = 0; i < 5; i++) {
    cout << *ptr << " ";
    ptr++;
}

上述代码中,我们将指针ptr初始化为numbers数组首元素的地址,然后通过递增指针ptr并输出指针所指向的值来遍历整个数组。

指针与一维数组之间的转换

在C++中,数组名可以被解释为指向数组首元素的指针。这种特性使得我们可以使用指针操作数组内容,反之亦然。

以下是一个示例,展示了数组和指针之间的相互转换:

int numbers[] = {2, 4, 6, 8, 10};
int* ptr = numbers;
cout << ptr[0] << endl; // 输出第一个元素:2
cout << numbers[1] << endl; // 输出第二个元素:4
ptr[2] = 12; // 修改第三个元素的值为12
cout << numbers[2] << endl; // 输出修改后的值:12

上述代码中,我们声明了一个整数数组numbers并初始化它。然后,我们声明一个指针ptr并将其设置为numbers数组首元素的地址。接下来,我们通过ptr[0]和numbers[1]访问相同的元素。最后,通过ptr[2] = 12修改了第三个元素的值,并通过numbers[2]验证修改结果。

指针与二维数组之间的转换

在C++中,二维数组实际上是连续内存空间的一维数组。通过指针运算,我们可以将二维数组视为一维数组来进行访问和操作。

以下是一个示例,展示了指针如何与二维数组交互:

int matrix[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};
int* ptr = &matrix[0][0];
cout << ptr[0] << endl; // 输出第一个元素:1
cout << *(ptr + 5) << endl; // 输出第二行第二个元素:6

上述代码中,我们声明了一个整数二维数组matrix并初始化它。然后,我们使用指针ptr将其设置为matrix数组首元素的地址。通过ptr[0]和*(ptr + 5)我们可以访问同样的元素。

实际案例

让我们看一个更复杂的实例,结合指针与二维数组的转换问题:

const int ROWS = 3;
const int COLS = 4;
int matrix[ROWS][COLS];
// 使用指针遍历和填充二维数组
int* ptr = &matrix[0][0];
for (int i = 0; i < ROWS * COLS; i++) {
    *ptr = i;
    ptr++;
}
// 使用指针遍历和输出二维数组
ptr = &matrix[0][0];
for (int i = 0; i < ROWS; i++) {
    for (int j = 0; j < COLS; j++) {
        cout << *ptr << " ";
        ptr++;
    }
    cout << endl;
}

上述代码中,我们使用matrix数组的首元素地址初始化了指针ptr。然后,在一个循环中,我们使用指针来填充整个二维数组。接着,再次使用指针从头到尾遍历并输出整个二维数组。

输出结果如下:

0 1 2 3 
4 5 6 7 
8 9 10 11


相关文章
|
8天前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
8天前
|
C++
C++(十八)Smart Pointer 智能指针简介
智能指针是C++中用于管理动态分配内存的一种机制,通过自动释放不再使用的内存来防止内存泄漏。`auto_ptr`是早期的一种实现,但已被`shared_ptr`和`weak_ptr`取代。这些智能指针基于RAII(Resource Acquisition Is Initialization)原则,即资源获取即初始化。RAII确保对象在其生命周期结束时自动释放资源。通过重载`*`和`-&gt;`运算符,可以方便地访问和操作智能指针所指向的对象。
|
8天前
|
C++
C++(九)this指针
`this`指针是系统在创建对象时默认生成的,用于指向当前对象,便于使用。其特性包括:指向当前对象,适用于所有成员函数但不适用于初始化列表;作为隐含参数传递,不影响对象大小;类型为`ClassName* const`,指向不可变。`this`的作用在于避免参数与成员变量重名,并支持多重串联调用。例如,在`Stu`类中,通过`this-&gt;name`和`this-&gt;age`明确区分局部变量与成员变量,同时支持链式调用如`s.growUp().growUp()`。
|
19天前
|
搜索推荐 C语言
指针与数组
指针与数组
47 9
|
20天前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
22 1
|
22天前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
35 4
|
24天前
|
安全 NoSQL Redis
C++新特性-智能指针
C++新特性-智能指针
|
27天前
|
编译器 C++
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
|
27天前
|
算法 Java
双指针在数组遍历中的应用
文章深入探讨了双指针技术在数组遍历中的应用,通过实战例子详细解释了快慢指针和首尾指针的不同用法,并提供了解决LeetCode相关问题的Java代码实现。
|
14天前
|
C++ 索引
C++数组、vector求最大值最小值及其下标
C++数组、vector求最大值最小值及其下标
40 0