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

文章目录

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

1、二维数组 打印函数

2、二维数组 排序函数

二、完整代码示例





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



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 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )

上一篇:WPF 自定义Expander


下一篇:WPF 自定义CheckBox