精华内容
下载资源
问答
  • (2)、第二种是用一维数组来表示二维数组,从显示的元素地址可以看出,二维数组和一维数组表示的二维数组在内存中的储存方式其实是一样的,不过使用二维数组看起来要简单些,只要不用进行地址转换。 (3)、第三...
  • 主要介绍了C语言二维数组的处理实例,有需要的朋友可以参考一下
  • 有下面这样的一个二维表,请将其使用二维数组输出 姓名 语文 数学 英语 张三 80 70 90 李四 40 50 90 王五 90 98 100 题解 与几位童鞋交流了一下发现他们都把汉字单独拿出来了,只用数组存储的成绩,...
  • 主要介绍了C语言二维数组中的查找的实例的相关资料,需要的朋友可以参考下
  • 主要介绍了C语言二维数组的指针指向问题,文中不建议用二级指针来访问二维数组,需要的朋友可以参考下
  • C程序设计 第七章二维数组 7.1基本操作 二维数组一维数组数组中每个元素是类型相同的一维数组 定义 类型说明符 数组名[常量表达式][常量表达式] float a[3][4] 数组名为a,有12个元素,下标从0开始,即a[0][0] a[0][1] ...
  • 有学习C语言的同学可以试试做这个题目,涉及到指针,函数,二维数组的相关知识,里面附带本人自己写的代码(vs2008环境),不足的地方望多提意见。
  • C语言二维数组的定义和引用,适合初学者学习c语言中二维数组的定义与引用。
  • c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度。 例如: #include void func(int n, char str[ ][5] ) { int i; for(i = 0; i < n; i++) printf("/nstr...
  • 目录 一.二维数组简介 二.定义二维数组并初始化 1.定义二维数组 2.初始化二维数组 ...三.访问二维数组 ...而二维数组和一维数组类似,简单理解就是:二维数组由多个一维数组构成,语法如下: type arrayName

    目录

    零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

    一.二维数组简介

    C 语言中,一组数据的集合称为数组 Array ,也称为一维数组,比如:字符串 char ,实际上也算是数组,字符串由多个字符构成;

    而二维数组和一维数组类似,简单理解就是:二维数组由多个一维数组构成,语法如下:

    type arrayName [ x ][ y ];
    //x的取值范围:0 <= index < x   下标重0开始,最大值为x-1,否则会产生下标越界
    //y的取值范围:0 <= index < y   下标重0开始,最大值为y-1,否则会产生下标越界
    

    因此,数组中的每个元素是使用形式为 a[ i , j ] 的元素名称来标识的,其中 a 是数组名称,i 和 j 是唯一标识 a 中每个元素的下标。

    二维数组中的每一个数据叫做数组元素 Element ,二维数组中的每个元素都有一个序号,这个序号由 xy 组成(即横向坐标和纵向坐标),都是从 0 开始,例如,a[0][6] 表示第1行第7个元素,a[3][1] 表示第 4 行第2个元素;

    举个例子:定义一个这样的二维数组

    int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vho32HiP-1629616389974)(https://www.codersrc.com/wp-content/uploads/2021/06/e4da3b7fbbce234.png “C语言 二维数组定义和使用-猿说编程”)]

    二维数组本质就是一个一维数组。如果把二维数组的每一行看成一个整体,即看成一个数组中的一个元素,那么整个二维数组就是一个一维数组

    二.定义二维数组并初始化

    1.定义二维数组

    要想把数据放入内存,必须先要分配内存空间。例如:放入4个一维数组,8个整数,即 4 行 8 列:

    //整形数组
    int a[4][8];//由4个一维数组构成,索引值0~3;每个一维数组中有8个整形变量,索引值0~7;
    //浮点数数组
    float a[4][8];//由4个一维数组构成,索引值0~3;每个一维数组中有8个浮点数变量,索引值0~7;
    //浮点数数组
    double a[4][8];//由4个一维数组构成,索引值0~3;每个一维数组中有8个浮点数变量,索引值0~7;
    //字符串
    char a[4][8];//由4个一维数组构成,索引值0~3;每个一维数组中有8个字符变量,索引值0~7;
    

    2.初始化二维数组

    A.在定义二维数组的同时赋值

    多维数组可以通过在括号内为每行指定值来进行初始化。下面是一个带有 3 行 4 列的数组。

    int a[3][4] = {
                    {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
                    {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
                    {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
    };
    

    内部嵌套的括号是可选的,下面的初始化与上面是等同的:

    int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
    

    B.根据二维数组下标对数组元素赋值

    在通过下标修改二维数组的值时,需要注意 数组下标越界 的问题;

    a[4][2];  //定义一个二维数组
    a[0][0]=10;
    a[0][1]=20;
    a[1][0]=30;
    a[1][1]=40;
    a[2][0]=50;
    a[2][1]=60;
    a[3][0]=70;
    a[3][1]=80;
    //a[0][3]=20; //错误写法,下标越界
    //a[0][2]=20; //错误写法,下标越界
    //a[4][2]=20; //错误写法,下标越界
    等价:
    a[4][2]= {10,20,30,40,50,60,70,80}
    等价:
    a[4][2] = {
                    {10,20},
                    {30,40},
                    {50,60},
                    {70,80}
    }
    

    C.只给部分元素赋初值,当{ }中值的个数少于元素个数时,只给前面部分元素赋值,后面的元素默认为0

    //案例一
    int a[3][4] = {{1},{2},{3}};
    等价:
    int a[3][4] = {{1,0,0,0},{2,0,0,0},{3,0,0,0}};
    //案例二
    int a[3][4] = {{1}};
    等价:
    int a[3][4] = {{1,0,0,0},{0,0,0,0},{0,0,0,0}};
    

    当赋值的元素少于数组总体元素的时候,剩余的元素自动初始化为 0

    对于short、int、long,就是整数0;
    对于char,就是字符 '\0';
    对于float、double,就是小数0.0。
    

    三.访问二维数组

    **数组中的每个元素都有一个序号,这个序号从 0 开始,称为下标 index ,例如,a[0][2] 表示第 1 行第 3 个元素,a[3][5] 表示第 4 行第 6 个元素。所以我们可以直接通过下标访问数组中元素的值,**例如:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 二维数组定义和使用
    //@Time:2021/06/12 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #include <stdio.h>
    int main(void) {
        int a[3][4] = {{1,2,3,4},{2,4,6,8},{3,6,9,0}};
        for (int i = 0 ;i<3;i++) {
            for(int j = 0;j<4;j++)
                printf("a[%d][%d] = %d  ",i,j,a[i][j]);//根据下标查询
            //换行
            printf("\n");
        }
        return 0;
    }
    /*
    输出:
    a[0][0] = 1  a[0][1] = 2  a[0][2] = 3  a[0][3] = 4
    a[1][0] = 2  a[1][1] = 4  a[1][2] = 6  a[1][3] = 8
    a[2][0] = 3  a[2][1] = 6  a[2][2] = 9  a[2][3] = 0
    */
    

    四.修改二维数组

    **我们既然可以通过数组下标访问数组的值,那么同样也可以使用下标修改数组的值,**例如:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 二维数组定义和使用
    //@Time:2021/06/12 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #include <stdio.h>
    int main(void) {
        int a[3][4] = {{1,2,3,4},{2,4,6,8},{3,6,9,0}};
        for (int i = 0 ;i<3;i++) {
            for(int j = 0;j<4;j++)
                printf("a[%d][%d] = %d  ",i,j,a[i][j]);//根据下标查询
            //换行
            printf("\n");
        }
        printf("-------------------------------------------\n");
        //修改数组的值
        for (int i = 0 ;i<3;i++) {
            for(int j = 0;j<4;j++)
                a[i][j] *= 10 ;//等价 a[i][j] = a[i][j] * 10
            //换行
            printf("\n");
        }
        //查询修改后数组的值
        for (int i = 0 ;i<3;i++) {
            for(int j = 0;j<4;j++)
                printf("a[%d][%d] = %d  ",i,j,a[i][j]);//根据下标查询
            //换行
            printf("\n");
        }
        return 0;
    }
    /*
    输出:
    a[0][0] = 1  a[0][1] = 2  a[0][2] = 3  a[0][3] = 4
    a[1][0] = 2  a[1][1] = 4  a[1][2] = 6  a[1][3] = 8
    a[2][0] = 3  a[2][1] = 6  a[2][2] = 9  a[2][3] = 0
    -------------------------------------------
    a[0][0] = 10  a[0][1] = 20  a[0][2] = 30  a[0][3] = 40
    a[1][0] = 20  a[1][1] = 40  a[1][2] = 60  a[1][3] = 80
    a[2][0] = 30  a[2][1] = 60  a[2][2] = 90  a[2][3] = 0
    */
    

    五.猜你喜欢

    1. 安装 Visual Studio
    2. 安装 Visual Studio 插件 Visual Assist
    3. Visual Studio 2008 卸载
    4. Visual Studio 2003/2015 卸载
    5. C 语言格式控制符/占位符
    6. C 语言逻辑运算符
    7. C 语言三目运算符
    8. C 语言逗号表达式
    9. C 语言 sizeof 和 strlen 函数区别
    10. C 语言 strcpy 和 strcpy_s 函数区别
    11. C 语言 memcpy 和 memcpy_s 区别
    12. C 语言 数组定义和使用
    13. C 语言 数组遍历
    14. C 语言 数组排序 – 冒泡法排序
    15. C 语言 数组排序 – 选择法排序
    16. C 语言 数组排序 – 插入法排序
    17. C 语言 数组排序 – 快速法排序
    18. C 语言 数组下标越界
    19. C 语言 数组内存溢出
    20. C 语言 数组下标越界和内存溢出区别
    21. C 语言 二维数组定义和使用

    未经允许不得转载:猿说编程 » C 语言 二维数组定义和使用

    展开全文
  • 二维数组怎样才能按列的顺序转成一维数组啊 是按列的,不是按顺序
  • C语言中,二维数组的参数传递。 例如: char str[5][100]; 如果作为参数传递,内有详细示例。 三种传参示例供参考。
  • C语言 实在 矩阵的乘法 加法 转置 各个子涵数都有通用性,内存的分配是使用二维数组动态 malloc 分配
  • C语言二维数组指针(指向二维数组的指针)详解

    万次阅读 多人点赞 2020-05-27 17:43:22
    如有需要,请访问C语言二维数组指针(指向二维数组的指针)详解 二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。以下面的二维数组 a 为例: int a[3][4] = { ...

    声明!本文转载仅为方便学习使用!
    如有需要,请访问
    C语言指针数组(数组每个元素都是指针)详解
    C语言二维数组指针(指向二维数组的指针)详解

    二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。以下面的二维数组 a 为例:

    int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
    

    从概念上理解,a 的分布像一个矩阵:

    0   1   2   3
    4   5   6   7
    8   9  10  11
    

    但在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存:
    二维数组在内存中的存储

    C语言中的二维数组是按行排列的,也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 个元素也是依次存放。数组 a 为 int 类型,每个元素占用 4 个字节,整个数组共占用 4×(3×4) = 48 个字节。

    C语言允许把一个二维数组分解成多个一维数组来处理。对于数组 a,它可以分解成三个一维数组,即 a[0]、a[1]、a[2]。每一个一维数组又包含了 4 个元素,例如 a[0] 包含 a[0][0]、a[0][1]、a[0][2]、a[0][3]

    假设数组 a 中第 0 个元素的地址为 1000,那么每个一维数组的首地址如下图所示
    在这里插入图片描述
    为了更好的理解指针和二维数组的关系,我们先来定义一个指向 a 的指针变量 p:

    int (*p)[4] = a;
    

    括号中的*表明 p 是一个指针,它指向一个数组,数组的类型为int [4],这正是 a 所包含的每个一维数组的类型。

    [ ]的优先级高于*,( )是必须要加的,如果赤裸裸地写作int *p[4],那么应该理解为int *(p[4])p 就成了一个指针数组,而不是二维数组指针,这在《C语言指针数组》中已经讲到。
    对指针进行加法(减法)运算时,它前进(后退)的步长与它指向的数据类型有关,p 指向的数据类型是int [4],那么p+1就前进 4×4 = 16 个字节,p-1就后退 16 个字节,这正好是数组 a 所包含的每个一维数组的长度。也就是说,p+1会使得指针指向二维数组的下一行,p-1会使得指针指向数组的上一行。

    数组名 a 在表达式中也会被转换为和 p 等价的指针!

    下面我们就来探索一下如何使用指针 p 来访问二维数组中的每个元素。按照上面的定义:

    1. p指向数组 a 的开头,也即第 0 行;p+1前进一行,指向第 1 行。

    2. *(p+1)表示取地址上的数据,也就是整个第 1 行数据。注意是一行数据,是多个数据,不是第 1 行中的第 0 个元素,下面的运行结果有力地证明了这一点:

    #include <stdio.h>
    int main(){
        int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
        int (*p)[4] = a;
        printf("%d\n", sizeof(*(p+1)));
        return 0;
    }
    

    运行结果:

    16
    
    1. *(p+1)+1表示第 1 行第 1 个元素的地址。如何理解呢?

    *(p+1)单独使用时表示的是第 1 行数据,放在表达式中会被转换为第 1 行数据的首地址,也就是第 1 行第 0 个元素的地址,因为使用整行数据没有实际的含义,编译器遇到这种情况都会转换为指向该行第 0 个元素的指针;就像一维数组的名字,在定义时或者和 sizeof& 一起使用时才表示整个数组,出现在表达式中就会被转换为指向数组第 0 个元素的指针。

    1. *(*(p+1)+1)表示第 1 行第 1 个元素的值。很明显,增加一个 * 表示取地址上的数据。

    根据上面的结论,可以很容易推出以下的等价关系:

    a+i == p+i
    a[i] == p[i] == *(a+i) == *(p+i)
    a[i][j] == p[i][j] == *(a[i]+j) == *(p[i]+j) == *(*(a+i)+j) == *(*(p+i)+j)
    

    实例】使用指针遍历二维数组。

    #include <stdio.h>
    int main(){
        int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
        int(*p)[4];
        int i,j;
        p=a;
        for(i=0; i<3; i++){
            for(j=0; j<4; j++) printf("%2d  ",*(*(p+i)+j));
            printf("\n");
        }
        return 0;
    }
    

    运行结果:

    0   1   2   3
     4   5   6   7
     8   9  10  11
    

    指针数组和二维数组指针的区别

    针数组和二维数组指针在定义时非常相似,只是括号的位置不同:

    int *(p1[5]);  //指针数组,可以去掉括号直接写作 int *p1[5];
    int (*p2)[5];  //二维数组指针,不能去掉括号
    

    指针数组和二维数组指针有着本质上的区别:指针数组是一个数组,只是每个元素保存的都是指针,以上面的 p1 为例,在32位环境下它占用 4×5 = 20 个字节的内存。二维数组指针是一个指针,它指向一个二维数组,以上面的 p2 为例,它占用 4 个字节的内存。

    二维数组名做参数传递问题

    展开全文
  • C语言二维数组

    千次阅读 2019-04-10 13:21:29
    //二维数组 //二维数组的本质:以int arr[2][2]={{1,2},{4,5}};为例该二维数组是由2个元素构成,每个元素是由int类型长度为[2]的数组组成(还可以说成每个元素是由int类型含2个元素的数组组成) #include <stdio....

    //二维数组
    //二维数组的本质:以int arr[2][2]={{1,2},{4,5}};为例该二维数组是由2个元素构成,每个元素是由int类型长度为[2]的数组组成(还可以说成每个元素是由int类型含2个元素的数组组成)
    #include <stdio.h>
    int main()
    {
    int i=0;
    int j=0;
    //int arr[3][2]={{1,2},{4,5},{6,7}};//完全初始化,确定而数组元素的个数和数组中元素由什么类型的元素组成后,对每个元素和每个元素组成的元素进行全面赋值
    //int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};//完全初始化
    /int arr2[3][2]={1};///不完全初始化,确定而数组元素的个数和数组中元素由什么类型的元素组成后,对每个元素和每个元素组成的元素进行部分赋值,未赋值的部分默认赋值为0,可有下断点进行测试
    /int arr3[3][2]={{},{4}};///不完全初始化,确定而数组元素的个数和数组中元素由什么类型的元素组成后,对每个元素和每个元素组成的元素进行部分赋值,未赋值的部分默认赋值为0,可有下断点进行测试
    //int arr4[][2]={1,2,4,5};//可以不给元素个数,编译器可以根据每个元素由几个的类型元素组成的数组去分配,元素的个数。但是不能不给元素组成的个数,如果没有它,编译器将不知道如何为每个元素分配空间
    //访问二位数组中的值
    //printf("%d\n",arr1[1][0]);//通过下标访问的原理,找数组中第1个元素,通过下标访问从第1个元素的下标0开始向右移至下标0元素的内容。
    //printf("%d\n",arr1[0][4]);//通过下标访问的原理,找数组中第0个元素,通过下标访问从第0个元素的下标0开始向右移至下标4元素的内容。
    //遍历数组的内容

    /*for(j=0;j<3;j++)
    {
    for(i=0;i<4;i++)
    {
    printf("%d\n",arr1[j][i]);
    }
    }*/
    
    /*   arr[0][0]=10;
       printf("%d\n",arr[1][1]);
    

    /
    int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};//完全初始化
    int(
    p)[4]=arr1;//二位数组首元素首地址
    int(* p) =arr1;
    int(
    p)[3][4] =&arr1;
    return 0;
    }

    展开全文
  • c语言二维数组习题

    2021-11-07 11:29:16
    随机产生4行3列的整型二维数组(数组元素值在1-10之间),分别求各行和各列的和 #include<stdio.h> void main(){ int array[4][3], (*pArr)[3], *p[4], i, j, sum;//感想1 srand(time(NULL)); for(i=0; i&...

    随机产生4行3列的整型二维数组(数组元素值在1-10之间),分别求各行和各列的和

    #include<stdio.h>
    
    void main(){
        int array[4][3], (*pArr)[3], *p[4], i, j, sum;//感想1
        srand(time(NULL));
        for(i=0; i<4; i++)
            for(j=0; j<3; j++)
                array[i][j] = rand()%10+1;
        pArr = array;
        for(i = 0; i < 4; i++)
            for(j = 0; j < 3; j++){
                printf("%d\t", pArr[i][j]);
                if(j == 2){
                    printf("\n");
                }
            }
        for(i=0; i<4; i++)
            p[i] = array[i];
        for(i=0; i<4; i++){
            sum = 0;
            for(j=0; j<3; j++){
                sum += p[i][j];
    
            }printf("第%d行的和是:%d \n", i+1,sum);
           }
           printf("\n");
         for(i=0; i<4; i++)//感想2
            p[i] = array[i];
            for(j=0; j<3; j++){
                sum=0;
            for(i=0; i<4; i++)
          {sum += p[i][j];}
        printf("第%d列的和是:%d\n",j+1,sum);}
    }
    

    做题感想

    1.(*parr)【3】代表3列,*p【4】代表4行

    2.一定要先行循环再列循环

    展开全文
  • c语言二维数组

    千次阅读 2019-05-11 14:15:33
    二维数组在内存中是由几个一维数组组成的 下面这个例题中的三个数组就相当于int ar[3][4]; 举一个例题 要求数组指针向下移动,在从数组里面向下移动,输出ar2中的第三个 在这要说明的数组的地址和数组的首元素地址的...
  • C语言 二维数组

    千次阅读 2019-04-14 09:14:14
    int a[4] = {20, 345, 700, 22}; 上面的数组可以看作是一行连续的数据,只有一个下标,...二维数组的定义 dataType arrayName[length1][length2]; dataType 为数据类型 arrayName 为数组名 length1 为第一维下...
  • c语言二维数组.pptx

    2020-02-27 11:36:17
    11 二维数组的定义和引用 ;注意; 11.1二维数组的定义;地址 值 数组元素;问题有了二维数组的基础那么多维数组如何定义呢 ;二维数组元素的表示形式为数组名下标下标 例如 a23 下标可以是整型表达式如 a2-12*2-1;常出现...
  • 二维数组的四种遍历方式: a[i][j] *(a[i]+j) *(*(a+i)+j) *(&a[0][0]+i*n+j) 1.a[i][j] :这种方法是最基本的方式 2.*(a[i]+j) :(a[i]+j)是下标为(i,j)的地址,通过‘ * ’运算就取得下标为(i,j)的元素值 ...
  • c++ c语言编写 二维数组的 冒泡排序 范例
  • C语言二维数组求最值

    2021-04-02 11:44:53
    C语言二维数组求最值 问题描述:求下图数组的最大值和最小值。 算法描述: 先构建一个二维数组,利用两层for循环嵌套 依次遍历整个数组。 include(stdio.h) void main() {int a[3][3]={4,2,34,7,3,12,5,6,5},i,j,...
  • 1 #include<stdio.h> 2 int main() 3 { 4 int i,j,row=0,colum=0,max; 5 int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; 6 max=a[0][0]; 7 for (i=0;i<=2;i++) 8 { 9 for (...
  • c语言二维数组和java二维数组的两大区别 1. 存储方式不同 直接开门见山 c语言: c语言里面的的二维数组存在栈空间中。 java: java里面的二维数组存在堆空间中。 2. 第二维不同 c语言: c语言里面的二维数组的第二...
  • 选择界面②用二维数组和调用函数实现学号、语文、数 学、英语成绩的输入、求每-一个人的总成绩、平均分、显 示、查询、修改和排序(按总分)功能、输出各科最高分、 以及排序后的成绩表(包含表头)。
  • 彻底理解C语言二维数组和指针

    千次阅读 多人点赞 2020-06-07 13:43:56
    C语言二维数组以及用指针操作相对于一组数组而言有些复杂,这里尝试通过类比的方式快速理解。 首先我们要理解一组数组以及其指针操作方法。比如定义数组:int a[10],则a为数组第0个元素的地址,即:a ==&a[0...
  • 上一章我们学习了C语言的一位数组,知道了数组是相同类型值的集合,这一节学习C语言二维数组。 一维数组可以当成是一排的数据,在这里我使用排队作为举例,在排队时只有一横排,没有纵列我们可以当成一维数组;这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,670
精华内容 25,868
关键字:

c语言二维数组

c语言 订阅