一数组名的理解
二⼀维数组传参的本质
三.⼆级指针
四指针数组
五指针数组模拟⼆维数组
终于到第二篇指针文章了!!
我们来定义指针变量p1和p2来把arr和arr[0]的地址打印出来发现都一样。
在进行指针的加法,发现跳过的是住在组中一个元素的字节。
由此可以推断出数组名就是数组首元素的地址。
但还是有两个例外
1.sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,
单位是字节
2.&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素
的地址是有区别的)
除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。
此处形参可以写成数组arr[]的形式,等于*arr。根据一中所讲。如果实参传过去的是整个数组,那么sizeof(arr)就是40个字节,如果是数组首元素的地址就是一个指针的变量。所以在函数内部是不能得到数组的个数。
应该在主函数计算出来,再传给函数。
指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪⾥?
这就是 ⼆级指针 。
#include<stdio.h>
int main()
{
int a = 0;
int* pa = &a;
int** ppa = &pa;
return 0;
}
指针数组是指针还是数组?
我们类⽐⼀下,整型数组,是存放整型的数组,字符数组是存放字符的数组。
那指针数组呢?是存放指针的数组
指针数组的每个元素都是⽤来存放地址(指针)的。
如下图:
上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的。