C 语言数组 ( 指针退化验证 | 计算数组大小 | #define LENGTH(array) (sizeof(array) / sizeof(*array)) )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言数组 ( 指针退化验证 | 计算数组大小 | #define LENGTH(array) (sizeof(array) / sizeof(*array)) )相关的知识,希望对你有一定的参考价值。





一、指针退化验证



n n n 维数组 作为 函数参数 , 会退化为 指针 , 注意这里只有 最高维 n n n退化为指针 , 该指针指向 若干 n − 1 n-1 n1 维数组 ;

验证 指针退化 问题 , 只需要使用

sizeof(array) / sizeof(*array)

代码 , 求数组大小即可 ;


假如 array 是数组 , 则 sizeof(array) 是整个数组的大小 , *array 是数组首元素 , sizeof(*array) 是数组首元素大小 , sizeof(array) / sizeof(*array) 就是数组大小 ;

array 表示数组首元素地址 , &array 表示数组地址 ;


假如 array 是指针 , 则 sizeof(array) 是指针变量的大小 4 4 4 字节 , *array 是指针指向的元素 , sizeof(*array) 是指针指向的元素的大小 , sizeof(array) / sizeof(*array) 就是 4 数 据 类 型 大 小 \\cfrac4数据类型大小 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
请按任意键继续. . .

以上是关于C 语言数组 ( 指针退化验证 | 计算数组大小 | #define LENGTH(array) (sizeof(array) / sizeof(*array)) )的主要内容,如果未能解决你的问题,请参考以下文章