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

142 篇文章 95 订阅





一、二维数组



前几篇博客中 , 介绍的是指针数组 ;

指针数组 的 结构特征 是 , 数组中的每个元素 , 即每个指针变量 可以 指向不同大小的 内存块 ;

二维数组 与 指针数组 的结构不同 , 二维数组 的 内存结构 是整齐的连续的 内存块 , 每个 一维指针 指向的内存块 的大小都是相同的 , 并且这些内存块 还是连续的 ;


1、二维数组声明及初始化


二维数组声明及初始化 :

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

2、二维数组遍历


二维数组遍历 :

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

3、二维数组排序


二维数组排序 : 对二维数组进行排序 , 不能单纯的交换指针指向 , 二维数组是一块整体连续的内存 , 必须对内存中存储的实际数据进行整体位置交换 ;

    // III. 二维数组排序


    // 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
    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);
            }
        }
    }




二、完整代码示例



完整代码示例 :

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

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

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

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

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


    // III. 二维数组排序


    // 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
    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);
            }
        }
    }


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


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

执行结果 :

在这里插入图片描述

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值