首页 > 代码库 > 指针数组和数组指针的区别
指针数组和数组指针的区别
最开始学习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 }
输出结果:
指针数组和数组指针的区别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。