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 n−1 维数组 ;
验证 指针退化 问题 , 只需要使用
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)) )的主要内容,如果未能解决你的问题,请参考以下文章
C 语言数组作为参数退化为指针问题 ( 问题描述 | 从编译器角度分析该问题 | 出于提高 C 语言执行效率角度考虑 | 数组作为参数的推荐方案 )
C 语言二级指针作为输入 ( 指针数组 | 将 二级指针 作为函数输入 | 抽象函数业务逻辑 )
C 语言数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )
C 语言数组 ( 多维数组做函数形参退化为指针过程 | int array[2][3] -> int array[][3] -> int (*array)[3] )