C语言之旅(3)指针数组与数组指针

来源:互联网 发布:php 淘宝csv导入源码 编辑:程序博客网 时间:2024/06/08 02:57

指针数组和数组指针这两个词汇很容易让人搞混。这就涉及到语言的层面了。首先指针数组:指针的数组(是一个数组)。数组指针:数组的指针(是一个指针)。

可以这么理解指针数组是一个集合,数组指针是一个变量(或者理解为数学中的数)。

指针数组:int *p[4];前面我说过去掉变量名字就是类型,那么把p去掉就变成了int *  [4]; 很显然这是一个拥有4个元素的数组,每个元素的类型是int *;int *;是指针类型,那么结论:这是一个包含4各个指针元素的数组。操作符的优先级是先看p[4]的,所以 int * 可以理解为一个整体。

数组指针:int (*p)[4];因为有小括号,所以肯定先看小括号里面的,去掉标量就是 int (*) [4];小括号里面剩下一个*。*号的其中一个作用就是声明指针,很明显就是这是一个指针,那么指针里面存的是什么类型的地址呢?现在就把*号去掉,剩下的是int [4];显然这是数组,所以这一个存有包含4个int类型元素的数组的地址的指针。


从上面的图中可以知道,这是一个指针数组,元素的类型是int *,是指针,所以这样复制是不对的,应该赋值指针类型的变量。

这个图中的赋值就是正确的。

上图可以看出来这是一个指针,是一个数组指针。这个变量的存储类型应该是一个int arr[4];这种样式的数组的地址。

这个就是正确的赋值。

接下来再让大家看一个图片。

从这个图中就可以印证我前面说的话,arr和&arr是不一样的,arr:数组首元素的首地址,这个元素是int 类型的。而&arr:是整个数组的地址。这个地址的类型是int [4];

所以大家要区分这两者的区别。