前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )

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

作者头像
韩曙亮
发布2023-03-29 21:31:42
9360
发布2023-03-29 21:31:42
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

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


1、二维数组 打印函数

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

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

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

代码示例 :

代码语言:javascript
复制
/*
 * 此处遍历时 , 注意指针的步长 ,
 * 传入一个二级指针 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] 作为形参 ;

代码示例 :

代码语言:javascript
复制
/*
 * 二维数组
 */
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;
}

二、完整代码示例


完整代码示例 :

代码语言:javascript
复制
#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;
}

执行结果 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、抽象 二维数组 业务函数
    • 1、二维数组 打印函数
      • 2、二维数组 排序函数
      • 二、完整代码示例
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档