zoukankan      html  css  js  c++  java
  • 指针数组和数组指针的区别

    最开始学习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 }

    输出结果:

          

  • 相关阅读:
    CF1051F The Shortest Statement 题解
    CF819B Mister B and PR Shifts 题解
    HDU3686 Traffic Real Time Query System 题解
    HDU 5969 最大的位或 题解
    P3295 萌萌哒 题解
    BZOJ1854 连续攻击游戏 题解
    使用Python编写的对拍程序
    CF796C Bank Hacking 题解
    BZOJ2200 道路与航线 题解
    USACO07NOV Cow Relays G 题解
  • 原文地址:https://www.cnblogs.com/cxq0017/p/6514837.html
Copyright © 2011-2022 走看看