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

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

输出结果:

      

原文地址:https://www.cnblogs.com/cxq0017/p/6514837.html