前言:“数组指针”和“指针数组”,咱俩名字组成完全一样,完全就是颠倒了一下前后,很多人搞混这俩名词,所以这篇里面我会详细介绍二者的理解与识别方法。
数组指针:
先了解一下数组指针的概念,首先,数组指针是一种指针,其指向的是数组,其基本形式为
int ( * ) []
因为方括号 [ ] 的优先级高于*,故而*后面的数组名会先与 [ ] 结合,可是我们希望数组名与*结合,所以先打起来括号把它们锁死(开玩笑),让它们先在一起再写 [ ] ,部分初始化后为
int nums[10];
int ( * num ) [x] = &nums;
一步一步理解意思,其意义为名为num的一个指针,指向的是类型为int、元素个数为x的数组,此时要注意,num指向的是整个nums数组,所以当使用num+1时,会跳过整个nums数组。
原本在使用指针打印某一个数组时,可以用作
int i = 0;
int nums[]={1,2,3,4,5,6};
int * p = nums;
while(i<sz)//sz假设是数组长度
{
printf("%d",*(p+i));
i++;
}
如果想用数组指针,但又不想跳过整个数组时 ,可以采用以下
int i = 0;
int nums[]={1,2,3,4,5,6};
int (* num )[sz] = &nums;//sz依旧假设为长度
while( i < sz )
{
printf("%d", (*num)[i] );----调为num[i]并且解引用即可
i++;
}
数组指针在许多地方包括使用自定义函数的传参时会常用到。
指针数组:
指针数组,顾名思义为“装着指针的数组”,它是一种数组,数组的内容是指针( * ),用于存放指针的一类数组,类比int 、char等定义的数组来说,就是把里面的元素从int 、char换成了int *,
因此定义形式为
int num = 5;
int *p = #
int * num[1]={ p };
指针数组一般会用在后续函数指针数组里面,作为调用函数的形式出现。
总结:相信不难发现,区别指针数组与数组指针的方法就是看后面两个字,是数组指针那就是指针,指针数组就是数组。