指针数组与数组指针

数组指针与指针数组

动态数组

扩容:空间不够,重新申请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;
    }
相关推荐
Alex艾力的IT数字空间16 分钟前
完整事务性能瓶颈分析案例:支付系统事务雪崩优化
开发语言·数据结构·数据库·分布式·算法·中间件·php
玖剹23 分钟前
二叉树递归题目(一)
c语言·c++·算法·leetcode
虫师c25 分钟前
List vs Set:深入剖析Java两大集合的核心区别与实战应用
java·数据结构·list·set·java集合
mjhcsp27 分钟前
C++ 数组:基础与进阶全解析
开发语言·c++
ChoSeitaku27 分钟前
线代强化NO6|矩阵|例题|小结
算法·机器学习·矩阵
量子炒饭大师29 分钟前
【一天一个计算机知识】—— 【编程百度】翻译环境与运行环境
c语言·汇编·c++·gitee·机器翻译
Neil今天也要学习32 分钟前
永磁同步电机无速度算法--基于一阶线性状态观测器的反电动势观测器
算法
橘颂TA35 分钟前
【剑斩OFFER】算法的暴力美学——寻找峰值
数据结构·算法·力扣·c/c++
陈陈爱java35 分钟前
秋招八股算法常见
数据结构·算法
不穿格子的程序员38 分钟前
从零开始写算法——二分-寻找旋转排序数组中的最小值
数据结构·算法·leetcode·二分查找