本篇文章将讲解以下知识:
1、二维数组传参的本质
2、函数指针变量
3、函数指针数组
1、二维数组传参的本质
有了数组指针的理解,我们就能弄清楚二维数组传参的本质了
例如:
在一维数组中,数组名是数字首元素的地址。但有两个例外:
(1)&数组名
(2)sizeof(数组名)
二维数组的数组名也是数组首元素的地址,到底是谁的地址呢?是二维数组第一行的地址。
以下列代码为例:
上述带代码中的arr+i就是arr[0](当i等于0时)、arr[1](当i等于1时) 、arr[2](当i等于2时).
arr数组内部结构:
事实上,二维数组是由一维数组组成的。把一维数组作为数组的元素,这个时候就是二维数组。
总结:二维数组的传参,形参的部分可以写成数组形式也可以写成数组,也可以写成指针形式。当形参写成数组的形式时,行的元素的个数可以省略。
所以根据函数名是数组首元素的地址这个规则,二维数组的数组名表示的就是二维数组第一行的地址,是一维数组的地址,类型是数组指针类型。在上面的例子中,第一行的一维数组的类型就是int[5],所以第一行的地址的类型就是:int (*) [5],意味着二维数组传参本质上也是传递了地址,传递的是二维数组第一行这个一维数组的地址。
2、函数指针变量
(1)函数指针变量的创建
数组指针-----指针(地址)-------指向数组的-------存放的是数组的地址。
函数指针变量是用来存放函数地址的,未来通过地址能够调用函数的。
&数组名是整个数组的地址,数组名是数组首元素的地址。两个地址的值是一样的,含义不一样,比如:指针变量+-整数。
函数指针变量解析:
注意:&函数名和函数名都是函数的地址,没有区别。
(2)函数指针变量的使用
例如;