• c++ 指针数组与指向数组的指针


    指针数组与指向数组的指针

    1、int (*a)[10]-->指向数组的指针

    a是一个二级指针,可认为是一个二维数组的首地址,指向一个一维数组,数组存储了10个int数据。

    int arr1[10];             // 一维数组
    int arr2[2][10];          // 二维数组
    
    int (*a)[10] = arr1&;     // a为指向一维数组的指针,arr1&应该替换为&arr1,cblog插件有问题
    int (*b)[10] = arr2;      // b为指向一维数组的指针
    // 指向一维数组(维度为10)的指针,其实是一个二级指针,用来接收二维数组的(二维数组变量名就是一个二级指针)。
    

    2、int *a[10]-->指针数组

    a是一个一级指针,是数组的首地址,指向一个int指针数据,数组存了10个int指针

    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    int *a[10] = {&arr[0],&arr[1],&arr[2],&arr[3],&arr[4],&arr[5],&arr[6],&arr[7],&arr[8],&arr[9]};
    for(int i=0; i<10; ++i) {
        cout<<*a[i]<<endl;
    }
    

    变量定义分3个部分:

    1. 变量存储数据的类型
    2. 变量本身的类型(普通变量,指针,引用)
    3. 变量是否是数组
    int a;   
    // 第一部分:int,表示变量存储的是int类型数据
    // 第二部分:a,表示普通变量
    // 第三部分:没有第三部分,说明不是数组
    // 三部分组合在一起的含义就是:普通变量,存储的类型是int
    
    int *a--->(int*)a;
    // 第一部分:int *,表示变量存储的是一个int类型的指针
    // 第二部分:a,表示普通变量
    // 第三部分:没有第三部分,说明不是数组
    // 三部分组合在一起的含义就是:普通变量,存储的类型是int*
    // using int_ptr = int *; int *a == int_ptr a;
    
    int *a[10]--->(int*)a[10];
    // 第一部分:int *,表示变量存储的是一个int类型的指针
    // 第二部分:a,表示普通变量
    // 第三部分:[10]表示是数组变量
    // 三部分组合在一起的含义就是:一个长度为10的数组,存储的类型是int*
    
    int (*a)[10];
    // 第一部分:int,表示变量存储的是一个int类型的数据
    // 第二部分:*a,表示指针变量
    // 第三部分:[10]表示是数组变量
    // 三部分组合在一起的含义就是:指针变量a指向一个长度为10的数组,数组存储的是int类型数据
    
    int (&a)[10];
    // 第一部分:int,表示变量存储的是一个int类型的数据
    // 第二部分:&a,表示引用变量
    // 第三部分:[10]表示是数组变量
    // 三部分组合在一起的含义就是:变量a引用一个长度为10的数组,数组存储的是int类型数据
    
    int *(*a)[10];
    // 第一部分:int*,表示变量存储的是一个int类型的数据
    // 第二部分:*a,表示指针变量
    // 第三部分:[10]表示是数组变量
    // 三部分组合在一起的含义就是:指针变量a指向一个长度为10的数组,数组存储的是int*类型数据
    
    int *func();
    // 第一部分:int *,表示变量存储的是一个int类型的指针
    // 第二部分:func,表示普通变量
    // 第三部分:(),表示是函数变量。
    // 三部分组合在一起的含义就是:返回指针int*类型的函数
    // func是函数
    
    int (*func)();
    // 第一部分:int ,表示变量存储的是一个int类型的数据
    // 第二部分:*func,表示指针变量
    // 第三部分:(),表示是函数变量。
    // 三部分组合在一起的含义就是:返回int类型的函数的指针
    // func是函数的指针
    
    int *(*func)();
    // 第一部分:int* ,表示变量存储的是一个int类型的指针
    // 第二部分:*func,表示指针变量
    // 第三部分:(),表示是函数变量。
    // 三部分组合在一起的含义就是:返回int*类型的函数的指针
    // func是函数的指针
    
  • 相关阅读:
    JS DataURL 整理(一)
    JavaScript 与 ECMAScript 的关系
    HTML5 多媒体之<svg>标签 使用
    HTML5 多媒体之<canvas>标签 使用
    [转]信号量---进程间通信 ---php版
    [转]使用PHP的ftok()函数实现基于linux下系统级进程间消息通信demo(消息队列模式)
    【转】php ftok 使用
    [转]Golang调度模型
    【转】如何分析golang程序的内存使用情况---很有用
    【转】Go 中对栈中函数进行内联---这篇讲的不如上一篇,也还可以吧。。
  • 原文地址:https://www.cnblogs.com/yuandonghua/p/15636138.html
Copyright © 2020-2023  润新知