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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言数组 ( 多维数组做函数形参退化为指针过程 | int array[2][3] -> int array[][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;


执行结果 :


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;


执行结果 :


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;


执行结果 :

以上是关于C 语言数组 ( 多维数组做函数形参退化为指针过程 | int array[2][3] -> int array[][3] -> int (*array)[3] )的主要内容,如果未能解决你的问题,请参考以下文章

C 语言二级指针作为输入 ( 指针数组 | 将 二级指针 作为函数输入 | 抽象函数业务逻辑 )

20160211.CCPP体系详解(0021天)

13. 再论C语言中的指针

13. 再论C语言中的指针

13. 再论C语言中的指针

C 语言二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一二 模型数据拷贝到 三 模型中 并 排序 )