指针数组和数组指针的区别
Posted evilsnake
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针数组和数组指针的区别相关的知识,希望对你有一定的参考价值。
最开始学习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 }
输出结果:
以上是关于指针数组和数组指针的区别的主要内容,如果未能解决你的问题,请参考以下文章