• 指针数组和数组指针的区别


    最开始学习c语言的时候,老是对指针数组和数组指针弄混淆,但是从英文解释来看就比较容易了。

    指针数组array of pointers,即用于存储指针的数组,也就是数组元素都是指针。

    数组指针a pointer to an array,即指向数组的指针。

    比如:

    int *a[4]  指针数组

         表示:数组a中的元素都是为int类型的指针。

         如果要去数组里面的元素:*a[i],*(a[i])是一样的,因为[]优先级高于*;

    int(*a)[4]  数组指针

          表示指向数组的指针

          如果要取数据时:(*a)[i];

    但是当我们碰到int *a[4] 和 int(*a)[4] 类似定义时,我们如何知道哪个是指针数组,哪个是数组指针呢?

    其实主要看关系的远近?什么是关系的远近?

    int *a[4]:这句表达式中有两个运算符,*和[],但是[]的优先级要比*高,所以a要靠近[],那么则证明它是一个数组,数组里面存储的类型是指针,所以叫指针数组。

    int (*a)[4]:这句表达式里面,()和[]同级,但是由于()是从左至右的运算顺序,所以先()再[],那么这里先看()里面的内容,自然a更靠近*,所以a就是一个指针,指针里面存储(指向)的是一个数组地址。所以a是数组指针。

    对于实际应用中,对于指针数组,我们也经常这样使用

    typedef int* pInt;

    pInt a[4];

    看下面一段代码

     1 #include"stdafx.h"
     2 #include <iostream>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int array[4] = {1,2,3,4};
     8     int *a[4];    //指针数组
     9     int (*b)[4]; //数组指针
    10 
    11     b=&array;
    12 
    13     for(int i = 0;i < 4; i++)
    14     {
    15         a[i]=&array[i];
    16     }
    17 
    18     cout << *a[1] << endl; 
    19 
    20     cout << (*b)[2] << endl; 
    21 
    22     system("pause");
    23     return 0;
    24 
    25 }

    输出结果:

          

  • 相关阅读:
    Linux常用命令大全(非常全!!!)
    Springboot项目与vue项目整合打包
    Spring Boot开启Druid数据库监控功能
    (八)CXF添加自定义拦截器
    (七)CXF添加拦截器
    (六)cxf处理一些Map等复杂类型
    (无)webservice执行过程深入理解
    (四)CXF处理JavaBean以及复合类型
    (三)使用CXF开发WebService客户端
    (二)使用CXF开发WebService服务器端接口
  • 原文地址:https://www.cnblogs.com/cxq0017/p/6514837.html
Copyright © 2020-2023  润新知