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

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

文章目录

一、指针退化验证

二、完整代码示例





一、指针退化验证


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
请按任意键继续. . .

image.png

目录
相关文章
|
2天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
7天前
|
Go
Golang语言之数组(array)快速入门篇
这篇文章是关于Go语言中数组的详细教程,包括数组的定义、遍历、注意事项、多维数组的使用以及相关练习题。
17 5
|
8天前
|
存储 安全 C语言
C语言 二级指针应用场景
本文介绍了二级指针在 C 语言中的应用,
|
23天前
|
存储 编译器 C语言
【C语言篇】深入理解指针2
代码 const char* pstr = "hello world."; 特别容易让初学者以为是把字符串 hello world.放 到字符指针 pstr ⾥了,但是本质是把字符串 hello world. 首字符的地址放到了pstr中。
|
23天前
|
存储 程序员 编译器
【C语言篇】深入理解指针1
assert.h 头⽂件定义了宏 assert() ,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报错终⽌运⾏。这个宏常常被称为“断⾔”。
|
8天前
|
Go
Golang语言高级数据类型之指针篇
这篇文章详细讲解了Golang语言中的指针概念、指针地址和类型、定义指针变量、指针的细节操作、指针传值,以及内置函数new和make的用法和它们之间的区别。
13 0
|
11天前
|
存储 安全 Go
深入理解 Go 语言中的指针类型
【8月更文挑战第31天】
8 0
|
11天前
|
存储 Go 开发者
掌握Go语言中的指针
【8月更文挑战第31天】
6 0
|
23天前
|
C语言
【C语言】指针速览
【C语言】指针速览
15 0
|
4月前
|
Python
使用array()函数创建数组
使用array()函数创建数组。
59 3