目录
一、数组指针
二、指针数组
三、 数组指针的数组名不是二级指针
再来说最关键的:数组指针为什么不是二级指针呢?
代码如下:
四、指针数组的数组名是二级指针
在复习,在考试,在焦虑。
又一次学习到了数组指针和指针数组这个头疼的概念,只不过这次的头脑过更加清晰,理解更加深刻。
一、数组指针
数组指针是指针,这个指针指向数组。
二、指针数组
指针数组是数组,这个数组的每个元素是指针,也就是说:指针数组是保存地址的数组。
三、 数组指针的数组名不是二级指针
先看一组常见的辨析:
上述代码说明了:
数组指针(p)指向了这个数组(arr),并且:数组名的值是数组首元素的地址。
再看一组区别它们的代码:
上述代码说明了:
1.数组指针 取出来的是整个数组的地址
2.数组名是首元素的地址
3.&数组名是整个数组的地址
尽管它们三个在值上都等于&arr[0][0]。
再来说最关键的:数组指针为什么不是二级指针呢?
1.数组指针是指向数组的指针
二级指针是指向指针的指针
2.对数组指针进行解引用得到的是数组
对二级指针进行解引用得到的是指针
代码如下:
由上述代码可知:
*p <==> arr
arr是一个数组名,指向数组的首元素,那么*p也是一个指针形式的数组名,与arr完全相等。由此,*p并不是二级指针。
四、指针数组的数组名是二级指针
看一段推导关系:
数组名是指向数组中第一个元素的指针,指针数组是指向数组的,也就是说,指针数组是指向指针的指针,也即二级指针。
代码证明:
可能只有这么一条还是不具有足够的证明力度:
使用二维传递参数看看结果: