【C 语言】数组 ( 多维数组做函数形参退化为指针过程 | int array[2][3] -> int array[][3] -> int (*array)[3] )

简介: 【C 语言】数组 ( 多维数组做函数形参退化为指针过程 | int array[2][3] -> int array[][3] -> int (*array)[3] )

文章目录

一、多维数组做函数形参退化为指针过程

1、使用 int array[2][3] 作函数参数

2、使用 int array[][3] 作函数参数

3、使用 int (*array)[3] 作函数参数





一、多维数组做函数形参退化为指针过程


一维数组 作为 函数参数时 , 会退化为指针 ; 解决方案是 传入 数组首地址 和 数组元素个数 ;



如果 多维数组 作为 函数参数时 , 也存在退化问题 ;




1、使用 int array[2][3] 作函数参数


使用 int array[2][3] 作为函数参数 , 可以完整打印出二维数组中的值 ;


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print_array(int array[2][3])
{
    // 循环控制变量
    int i = 0, j = 0;
    // 打印 二维数组 值
    for(i = 0; i < 2; i ++)
    {
        for(j = 0; j < 3; j++)
        {
             printf("array[%d][%d] = %d\n", i, j, array[i][j]);
        }
    }
}
/**
 * @brief main
 * @return
 */
int main()
{
    // 声明一个 二维数组
    int array[2][3];
    // 循环控制变量
    int i = 0, j = 0;
    // 赋值时使用的索引值
    int index = 0;
    // 为 二维数组 赋值
    for(i = 0; i < 2; i ++)
    {
        for(j = 0; j < 3; j++)
        {
            array[i][j] = index++;
        }
    }
    // 打印二维数组值
    print_array(array);
    // 命令行不要退出
    system("pause");
    return 0;
}



执行结果 :

image.png




2、使用 int array[][3] 作函数参数


使用 int array[][3] 作为函数参数 , 可以完整打印出二维数组中的值 ;


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print_array(int array[][3])
{
    // 循环控制变量
    int i = 0, j = 0;
    // 打印 二维数组 值
    for(i = 0; i < 2; i ++)
    {
        for(j = 0; j < 3; j++)
        {
             printf("array[%d][%d] = %d\n", i, j, array[i][j]);
        }
    }
}
/**
 * @brief main
 * @return
 */
int main()
{
    // 声明一个 二维数组
    int array[2][3];
    // 循环控制变量
    int i = 0, j = 0;
    // 赋值时使用的索引值
    int index = 0;
    // 为 二维数组 赋值
    for(i = 0; i < 2; i ++)
    {
        for(j = 0; j < 3; j++)
        {
            array[i][j] = index++;
        }
    }
    // 打印二维数组值
    print_array(array);
    // 命令行不要退出
    system("pause");
    return 0;
}


执行结果 :


image.png



3、使用 int (*array)[3] 作函数参数


使用 int (*array)[3] 作为函数参数 , 可以完整打印出二维数组中的值 ;


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print_array(int (*array)[3])
{
    // 循环控制变量
    int i = 0, j = 0;
    // 打印 二维数组 值
    for(i = 0; i < 2; i ++)
    {
        for(j = 0; j < 3; j++)
        {
             printf("array[%d][%d] = %d\n", i, j, array[i][j]);
        }
    }
}
/**
 * @brief main
 * @return
 */
int main()
{
    // 声明一个 二维数组
    int array[2][3];
    // 循环控制变量
    int i = 0, j = 0;
    // 赋值时使用的索引值
    int index = 0;
    // 为 二维数组 赋值
    for(i = 0; i < 2; i ++)
    {
        for(j = 0; j < 3; j++)
        {
            array[i][j] = index++;
        }
    }
    // 打印二维数组值
    print_array(array);
    // 命令行不要退出
    system("pause");
    return 0;
}


执行结果 :


image.png

目录
相关文章
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
587 2
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
891 12
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
1208 1
Java 中数组Array和列表List的转换
|
测试技术 PHP 开发者
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
|
存储 C语言
指针的函数传参的详细讲解(一)
本文介绍了计算机内存管理与C语言中指针的基本概念及应用。从内存单元的划分到指针的定义,解释了指针作为地址的作用及其数据类型特性。文章通过代码示例详细说明了一级指针、二级指针的使用方法,以及`void*`指针的特点和限制。此外,还探讨了指针运算规则、函数指针传参解引用的原理,并结合链表实例分析了一级与二级指针在实际场景中的区别。最后附带两道指针练习题,帮助读者巩固理解。
381 0
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
1091 23
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
659 15
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
1717 0

热门文章

最新文章

  • 1
    PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
    417
  • 2
    Java 中数组Array和列表List的转换
    1208
  • 3
    JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
    890
  • 4
    通过array.reduce()实现数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式、聚合统计、处理树结构数据和性能优化,reduce()的使用详解(附实际应用代码)
    1689
  • 5
    通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
    890
  • 6
    通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
    622
  • 7
    多维数组操作,不要再用遍历循环foreach了!来试试数组展平的小妙招!array.flat()用法与array.flatMap() 用法及二者差异详解
    471
  • 8
    别再用双层遍历循环来做新旧数组对比,寻找新增元素了!使用array.includes和Set来提升代码可读性
    438
  • 9
    Array.forEach实战详解:简化循环与增强代码可读性;Array.forEach怎么用;面对大量数据时怎么提高Array.forEach的性能
    320
  • 10
    深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
    964