C语言之二维数组

1、定义、初始化

  数组的地址等于其首个元素的地址

  [存储类型] 数据类型 标识符 [行下标] [列下标]

2、元素引用

 数组名称【行下标】【列下标】

3、存储形式

  顺序存储,按行存储

4、深入理解二维数组

       

 

 

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

#define ROW 2
#define COL 3

static void initDoubleArray()
{
    // int arr[ROW][COL];
    // int arr[ROW][COL] = {{1,2,3},{4,5,6}}; //标准初始赋值
    int arr[ROW][COL] = {1, 2, 3, 4, 5, 6}; // 按内存分配顺序赋值
    int arr2[][COL] = {10, 2, 3, 4, 5, 6};  // 按内存分配顺序赋值 省略行
    int i, j;
    printf("%p \n", &arr2);
    for (i = 0; i < ROW; i++)
    {
        for (j = 0; j < COL; j++)
        {
            // arr[i][j] = j;
            // printf("%d ", arr2[i][j]);
            printf("%p --> %d\n ", &arr2[i][j], arr2[i][j]);
        }
        printf("\n");
    }
}
// 二维数组行列翻转
static void reverseDoubleArr()
{
    int arrA[ROW][COL] = {1, 2, 3, 4, 5, 6}; // 按内存分配顺序赋值
    int arrB[COL][ROW];
    int i, j;
    for (i = 0; i < ROW; i++)
    {
        for (j = 0; j < COL; j++)
        {
            printf("%d ", arrA[i][j]);
            arrB[j][i] = arrA[i][j];
        }
        printf("\n");
    }
    for (i = 0; i < COL; i++)
    {
        for (j = 0; j < ROW; j++)
        {
            printf("%d ", arrB[i][j]);
        }
        printf("\n");
    }
}
// 求最大值及其所在的位置
static void findMaxValue()
{
    int arr[ROW][COL] = {1, 2, 132, 43, 5, 6};
    int i, j;
    int max = arr[0][0], maxRol = 0, maxCol = 0;
    for (i = 0; i < ROW; i++)
    {
        for (j = 0; j < COL; j++)
        {
            if (max < arr[i][j])
            {
                max = arr[i][j];
                maxRol = i;
                maxCol = j;
            }
        }
    }
    printf("最大值==>%d  所在行 ==> %d  所在列 ==>%d", max, maxRol, maxCol);
}
// 求各行与各列的和
static void sum()
{
    // 给定一个4行3列的二维数组,求行与行的和,列与列的和,以及 总和
    // 解析:可以使用5行4列的二维数组,最后一个值分别存放计算结果,[4][3]存放总和
    int arr[5][4] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            arr[4][3] += arr[i][j];
            arr[4][j] += arr[i][j];
            arr[i][3] += arr[i][j];
        }
    }
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 4; j++)
            printf("%4d ", arr[i][j]);
        printf("\n");
    }
}

int main(void)
{
     initDoubleArray();
    // reverseDoubleArr();
    //findMaxValue();

    exit(0);
}

 

字符数组

#include <stdio.h>
#include <stdlib.h>
// 字符数据常用函数库为 <string>
#include <string.h>

#define STR_SIZE 32

int main(void)
{
    /**
     * 字符串定义方式
     *      存储类型 数据类型 标识符 下标
     *      char str[] = "hello";
     *      char str[6] = {'h','e','l','l','o'}
     */
    // char str[STR_SIZE] = {'a', 'b', 'c'};

    char str[] = "hello";
    char str1[7] = {'h', 'e', 'l', 'l', 'o', '1'};
    // sizeof strlen 函数区别
    // strlen 仅统计字符数组尾零之前的字符数
    // sizeof 则统计整个字符数组所占用的空间大小,包含尾零
    // printf("%d %d ", strlen(str1), sizeof(str1));

    // 字符串连接 strcat
    // printf("%s ", strcat(str, "world"));
    // printf("%s ", strncat(str, "world", 2));

    /**
     *  字符串比较
     * strcmp   以 ASCII 码值的方式对字符串进行比较 , 返回 -1 0 1
     * strncmp  以 ASCII 码值的方式对字符串的指定位数 进行比较 , 返回 -1 0 1
     */
    // printf("%d ", strcmp(str, str1));
    // printf("%d ", strncmp(str, str1,5));

    char str2[STR_SIZE];
    char str3[STR_SIZE];
    strcpy(str2, str1);
    strncpy(str3, str1, 3);

    puts(str1);
    puts(str2);
    puts(str3);

    exit(0);
}

 

posted @ 2023-02-23 20:39  迷~途  阅读(117)  评论(0编辑  收藏  举报