维数组 作为 函数参数 , 会退化为 指针 , 注意这里只有 最高维 第
维 会 退化为指针 , 该指针指向 若干
维数组 ;
验证 指针退化 问题 , 只需要使用
sizeof(array) / sizeof(*array)
代码 , 求数组大小即可 ;
假如 array
是数组 , 则 sizeof(array)
是整个数组的大小 , *array
是数组首元素 , sizeof(*array)
是数组首元素大小 , sizeof(array) / sizeof(*array)
就是数组大小 ;
array
表示数组首元素地址 , &array
表示数组地址 ;
假如 array
是指针 , 则 sizeof(array)
是指针变量的大小
字节 , *array
是指针指向的元素 , sizeof(*array)
是指针指向的元素的大小 , sizeof(array) / sizeof(*array)
就是
, 该值明显与数组大小不同 ;
通过上述公式 , 即可验证一个 变量 是 数组 还是 指针 ;
计算数组大小宏定义 :
/* 计算数组 array 大小 */
#define LENGTH(array) (sizeof(array)/sizeof(*array))
完整代码示例 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 计算数组 array 大小 */
#define LENGTH(array) (sizeof(array)/sizeof(*array))
/**
* @brief fun 二维数组 作函数参数 , 退化为 数组指针
* 每个指针 指向一个 一维数组
*/
void fun(int (*array)[3])
{
// 使用如下方法验证 array 形参是否是数组
int len = LENGTH(array);
printf("fun array len : %d\n", len);
}
/**
* @brief 主函数入口
* @return
*/
int main()
{
// 定义数组
int array[2][3] = {0};
// 计算数组长度
int len = LENGTH(array);
// 打印数组长度
printf("main array len : %d\n", len);
// 二维数组作为函数参数
fun(array);
// 命令行不要退出
system("pause");
return 0;
}
执行结果 :
main array len : 2
fun array len : 0
请按任意键继续. . .