DFSstar 2024-11-28 16:18 采纳率: 85.7%
浏览 11
已结题

C++数组指针的下标,天啊

学到了C++指针数组的概念。

其实我的问题是和下标有关

下面的代码我是这么理解的:

int a[3][4] = {
    {1,2,3},
    {4,5,6},
    {7,8,9}
}
int (*p)[5];
p = a;
cout << p+1;

上面输出的其实是&a[1][0]
声明了一个数组指针p,数组指针的跨度为[5],自增时越过5*sizeof(int)的长度。
而在初学数组的时候p+1跨过的长度是sizeof(int)的长度
这就带来了一个好奇,有下面代码

int a[5] = {1,2,3,4,5};
int* pa = a;
cout << pa[3] << ' ' << a[3] << endl;
cout << "----------" << endl;
int b[1][5] = {{6,7,8,9,10}};
int (*pb)[5] = b;
cout << pb[1] << endl;
cout << "----------" << endl;

上面这个例子,很明显指针本身可以具有下标的功能,可以利用下标进行所以,指针会按照自身的长度进行下标搜索
那数组指针的作用是啥呢,或者我可以用什么方式利用数组指针去遍历数组内的对象呢?
求解答呀

  • 写回答

2条回答 默认 最新

  • 趣享先生 全栈领域优质创作者 2024-11-28 16:18
    关注

    该回答参考ChatGPT,由吾为汝整理提供如若有用,还请题主采纳!

    在 C++ 中,指针和数组的概念确实很重要且有趣。你提到的数组指针和普通指针的行为差异,确实会引起一些困惑。让我们逐步分析你的问题。

    数组指针与普通指针

    1. 数组指针

      • 数组指针是指向数组的指针。声明为 int (*p)[5] 的指针 p 指向一个包含 5 个整数的数组。
      • 当你执行 p + 1 时,指针 p 会移动到下一个数组的起始地址,跨度为 5 * sizeof(int),因为它指向的是一个数组。
    2. 普通指针

      • 普通指针(如 int* pa)指向单个元素。执行 pa + 1 时,指针 pa 会移动到下一个整数的地址,跨度为 sizeof(int)

    代码分析

    int a[5] = {1,2,3,4,5};
    int* pa = a;
    cout << pa[3] << ' ' << a[3] << endl; // 输出 4 4
    

    在这里,pa[3]a[3] 都是访问数组 a 的第四个元素(索引从 0 开始),所以输出都是 4。

    int b[1][5] = {{6,7,8,9,10}};
    int (*pb)[5] = b;
    cout << pb[1] << endl; // 这里会输出一个地址,实际上是 pb + 1
    

    在这个例子中,pb[1] 实际上是访问 b 中的第二个数组(如果存在的话)。由于 b 只有一个数组,pb[1] 实际上是越界访问,结果是未定义行为。

    数组指针的作用

    数组指针的主要作用是处理多维数组。使用数组指针可以方便地遍历多维数组的元素。以下是一个示例,展示如何使用数组指针遍历二维数组:

    #include <iostream>
    using namespace std;
    
    int main() {
        int a[3][4] = {
            {1, 2, 3, 4},
            {5, 6, 7, 8},
            {9, 10, 11, 12}
        };
    
        int (*p)[4] = a; // 指向包含4个整数的数组
    
        // 遍历二维数组
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 4; ++j) {
                cout << p[i][j] << " "; // 使用数组指针访问元素
            }
            cout << endl;
        }
    
        return 0;
    }
    

    总结

    • 数组指针:适用于处理多维数组,能够以数组的方式访问元素。
    • 普通指针:适用于处理一维数组或单个元素,能够直接访问元素。

    使用数组指针可以让你更方便地处理多维数组,尤其是在需要传递数组到函数时。希望这些解释能帮助你更好地理解 C++ 中的指针和数组的关系!如果还有其他问题,欢迎继续提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月6日
  • 已采纳回答 11月28日
  • 创建了问题 11月28日