文章目录
一、指针退化验证
二、完整代码示例
一、指针退化验证
n nn 维数组 作为 函数参数 , 会退化为 指针 , 注意这里只有 最高维 第 n nn 维 会 退化为指针 , 该指针指向 若干 n − 1 n-1n−1 维数组 ;
验证 指针退化 问题 , 只需要使用
sizeof(array) / sizeof(*array)
代码 , 求数组大小即可 ;
假如 array 是数组 , 则 sizeof(array) 是整个数组的大小 , *array 是数组首元素 , sizeof(*array) 是数组首元素大小 , sizeof(array) / sizeof(*array) 就是数组大小 ;
array 表示数组首元素地址 , &array 表示数组地址 ;
假如 array 是指针 , 则 sizeof(array) 是指针变量的大小 4 44 字节 , *array 是指针指向的元素 , sizeof(*array) 是指针指向的元素的大小 , sizeof(array) / sizeof(*array) 就是
4 数 据 类 型 大 小 \cfrac{4}{数据类型大小}
数据类型大小
4
, 该值明显与数组大小不同 ;
通过上述公式 , 即可验证一个 变量 是 数组 还是 指针 ;
计算数组大小宏定义 :
/* 计算数组 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 请按任意键继续. . .