指针数组与数组指针

数组指针与指针数组

动态数组

扩容:空间不够,重新申请2倍大小的连续空间,拷贝元素后,释放旧空间

动态数组区别于静态数组,其不具备begin(),end()操作

c++ 复制代码
 //动态一维数组
    int n = 10;
    int *a = new int[n];//可以输入n值,不固定
    for (int i = 0; i < n;i++)
        a[i] = rand() % 100;
    for (int i = 0; i < n;i++)
        cout << a[i] << " ";

由于普通类型int,double没有指向首尾字符的指针,需要借助end(),begin()函数

c++ 复制代码
    int b[10];
    for (int i = 0; i < 10;i++)
        b[i] = rand() % 100;
    //迭代器遍历,只有静态数组有
    for (auto it = begin(b); it != end(b);it++)
        cout << (*it)<< " ";

或者直接使用静态数组名

c++ 复制代码
  int a[5] = {1, 6, 7, 9, 4};
    for(auto v:a)
        cout << v << " ";
初始化
c++ 复制代码
 //动态一维数组
    int n = 5;
    double *p = new double[n]{1.1, 2.2, 3.3, 4.4, 5.5};
    for (int i = 0; i < n;i++)
        cout << p[i] << " ";
    cout << endl;
    //动态字符串
    string *s = new string[n]{"aa", "bb", "cccc", "d", "eee"};
    for (int i = 0; i < n;i++)
        cout << s[i] << " ";

数组指针和指针数组

c++ 复制代码
    int arr[] = {1, 2, 3,4};
    //arr=&arr=&arr[0]
    cout << "  arr:" << arr << endl;
    cout << " &arr:" << &arr << endl;
    cout << "&arr[0]:" << &arr[0] << endl;
    int *pa = &arr[1];//指向数组第2个元素
    //arr = arr + 1;--arr的地址不可以改变
    pa = pa + 1;
    cout << (*pa) << ":"<< pa[1] << endl;//结果是:3,4
数组类型的指针

数组元素的类型 (*指针名)【】=&数组名

c++ 复制代码
int arr[] = {1, 2, 3,4};
    //必须加(),因为[]优先级高于*
    //(*parr)---这是一个指针
    //(*parr)[]---是一个数组类型的指针
    //int (*parr)[]---这个数组里面元素的类型是int
    int(*parr)[] = &arr;
    for (int i = 0; i <4;i++){
        //只需要访问下标改变,不需要指针自己的改变
        cout << (*parr)[i] << " ";
数组指针指向多个元素数组

首先: int (*p)[数组元素个数]=数组名

ABAP 复制代码
比如:arr[m][n],如果一个(*p)[]指向它,那么[]的大小为n
--
访问时候:P[i][j]等价于*(*(p+i)+j)   注意:*(p+i)
c++ 复制代码
 int aa[3][4] = {
        {1, 2, 3, 4},
        {22, 33, 44, 55},
        {77, 88, 99, 100}};
    int(*p)[4] = aa;//[]内是数组元素的个数,每一行
    for (int i = 0; i < 3;i++){
        for (int j = 0; j < 4;j++){
            cout << *(*(p + i) + j) << " ";
        }
        cout << endl;
    }
     for (int i = 0; i < 3;i++){
        for (int j = 0; j < 4;j++){
            cout <<p[i][j]<< " ";
        }
        cout << endl;
    }
元素是指针的数组

数据类型* 数组名【】

c++ 复制代码
  int a = 100;
    int b = 200;
    int c = 300;
    //arr[]是一个数组
    //int*---arr[]数组每一个元素是指针
    int *arr[] = {&a,&b,&c};
    for (int i = 0; i < 3;i++)
        cout << *arr[i] << " ";

扩展---一个数据类型是数组的指针,而且数组元素是指针类型

  • 首先得存在一个元素类型是指针的数组:int* arr[]

  • 然后定义一个类型为数组的指针指向它:int* (*parr)[]=&arr;

    c++ 复制代码
    (*parr)[i]=arr[i]=&i
    
    i=*(&i)=*((*parr)[i])
c++ 复制代码
    int a = 11, b = 22, c = 33;
    int *arr[] = {&a, &b, &c};
    //定义一个指向arr的元素类型为数组的指针
    int *(*parr)[] = &arr;
    // 想通过parr访问元素
    //(*parr)[0]=&b;
    //b=*(&b)=*(*parr[0])
    for (int i = 0; i < 3;i++)
        cout << *((*parr)[i]) << " ";

动态二维数组

c++ 复制代码
    int n =4;
    //**arr是指针的指针,然后指向了一个指针数组(数组里的元素全是指针)
    //然后把这个数组里面的每一个指针,动态创建一个一维数组
    int **arr = new int*[n];
    for (int i = 0; i < n;i++)
        arr[i] = new int[n];

定义了一个指向指针数组的双重指针arrayPtr

元素数据类型为 int* 的数组 int*[ ]

c++ 复制代码
//赋值和遍历
 for (int i = 0; i < n;i++){
        for (int j = 0; j < n;j++){
            arr[i][j] = rand() % 100;
        }
    }
    for (int i = 0; i < n;i++){
        for (int j = 0; j < n;j++){
            cout<<arr[i][j]<<" ";
        }
        cout << endl;
    }

利用new去创建可输入值的指针数组

int (p)[m]=new int[n] [m] 这里:n就是P的个数

c++ 复制代码
int n = 5;
    int(*p)[4] = new int[n][4]; // 先行后列
    for (int i = 0; i < n; i++)
        for (int j = 0; j < 4; j++)
            p[i][j] = rand() % 100;

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            cout << *(*(p + i) + j) << " ";
        }
        cout << endl;
    }
相关推荐
可均可可28 分钟前
C++之OpenCV入门到提高004:Mat 对象的使用
c++·opencv·mat·imread·imwrite
幸运超级加倍~43 分钟前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
白子寰1 小时前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
yannan201903131 小时前
【算法】(Python)动态规划
python·算法·动态规划
埃菲尔铁塔_CV算法1 小时前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR1 小时前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
linsa_pursuer1 小时前
快乐数算法
算法·leetcode·职场和发展
小芒果_011 小时前
P11229 [CSP-J 2024] 小木棍
c++·算法·信息学奥赛
qq_434085901 小时前
Day 52 || 739. 每日温度 、 496.下一个更大元素 I 、503.下一个更大元素II
算法
Beau_Will1 小时前
ZISUOJ 2024算法基础公选课练习一(2)
算法