C 语言二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )相关的知识,希望对你有一定的参考价值。





一、抽象 二维数组 业务函数




1、二维数组 打印函数


注意 , 二维数组 作为 函数参数 输入到函数中 , 不能传入 二维指针 ;

此处遍历时 , 注意指针的步长 ,传入一个二级指针 char ** , 会出错 , 如果传入 二级指针 , array[i] 等同于 *(array + i) , array 的步长是 10 ;

这里将 函数形参 定义为 char array[4][10] ;


代码示例 :

/*
 * 此处遍历时 , 注意指针的步长 ,
 * 传入一个二级指针 char ** , 会出错
 * 如果传入 二级指针 ,
 * array[i] 等同于 *(array + i)
 * array 的步长是 10
 */
int print_str(char array[4][10], int num)

    // 循环控制变量
    int i = 0;

    // 判断指针合法性
    if(array == NULL)
    
        printf("array == NULL\\n");
        return -1;
    

    // 打印二维数组中的字符串
    for(i = 0; i < num; i++)
    
        // 使用数组下标形式访问
        printf("%s\\n", array[i]);
        // 使用指针访问
        //printf("%s\\n", *(array + i));
    

    return 0;


2、二维数组 排序函数


二维数组排序时 , 也不能传入二维指针作为形参 , 需要传入 char array[4][10] 作为形参 ;


代码示例 :

/*
 * 二维数组
 */
int sort_array(char array[4][10], int num)

    // 循环控制变量
    int i = 0, j = 0;
    // 排序时 , 交换指针变量时的临时变量 , 存储指针指向的内存所存储的数据
    char tmp[10];

    // 判断指针合法性
    if(array == NULL)
    
        printf("array == NULL\\n");
        return -1;
    

    // 二维数组排序
    // 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
    for(i = 0; i < num; i++)
    
        for(j = i + 1; j < num; j++)
        
            // 核心逻辑 : 如果 array[i] 大于 array[j]
            //          就交换两个元素
            if(strcmp(array[i], array[j]) > 0)
            
                // 交换 i, j 位置的指针指向的内存数据
                strcpy(tmp, array[i]);
                strcpy(array[i], array[j]);
                strcpy(array[j], tmp);
            
        
    

    return 0;





二、完整代码示例



完整代码示例 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 * 此处遍历时 , 注意指针的步长 ,
 * 传入一个二级指针 char ** , 会出错
 * 如果传入 二级指针 ,
 * array[i] 等同于 *(array + i)
 * array 的步长是 10
 */
int print_str(char array[4][10], int num)

    // 循环控制变量
    int i = 0;

    // 判断指针合法性
    if(array == NULL)
    
        printf("array == NULL\\n");
        return -1;
    

    // 打印二维数组中的字符串
    for(i = 0; i < num; i++)
    
        // 使用数组下标形式访问
        printf("%s\\n", array[i]);
        // 使用指针访问
        //printf("%s\\n", *(array + i));
    

    return 0;


/*
 * 二维数组
 */
int sort_array(char array[4][10], int num)

    // 循环控制变量
    int i = 0, j = 0;
    // 排序时 , 交换指针变量时的临时变量 , 存储指针指向的内存所存储的数据
    char tmp[10];

    // 判断指针合法性
    if(array == NULL)
    
        printf("array == NULL\\n");
        return -1;
    

    // 二维数组排序
    // 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
    for(i = 0; i < num; i++)
    
        for(j = i + 1; j < num; j++)
        
            // 核心逻辑 : 如果 array[i] 大于 array[j]
            //          就交换两个元素
            if(strcmp(array[i], array[j]) > 0)
            
                // 交换 i, j 位置的指针指向的内存数据
                strcpy(tmp, array[i]);
                strcpy(array[i], array[j]);
                strcpy(array[j], tmp);
            
        
    

    return 0;



int main()

    // 循环控制变量
    int i = 0, j = 0;
    // 二维数组中的一维数组个数
    int num = 4;

    // 排序时 , 交换指针变量时的临时变量 , 存储指针指向的内存所存储的数据
    char tmp[10];

    // I. 二维数组
    char array[4][10] = "abc", "123", "258", "sfd";

    // II. 打印二维数组中的字符串
    print_str(array, num);


    // III. 二维数组排序


    // 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
    sort_array(array, num);


    // IV. 打印二维数组中的字符串
    printf("\\nSort:\\n");
    print_str(array, num);


    // 命令行不要退出
    system("pause");
    return 0;


执行结果 :

以上是关于C 语言二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )的主要内容,如果未能解决你的问题,请参考以下文章

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

C 语言二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )

C 语言二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )

c语言中如何通过二级指针来操作二维数组

C 语言二级指针案例 ( 字符串切割 | 返回 二维数组 作为结果 )

C 语言二级指针作为输入 ( 自定义二级指针内存 | 二级指针 排序 | 通过 交换指针方式 进行排序 )