C语言——数组(下)

书接上节

4. ⼀维数组在内存中的存储

有了前⾯的知识,我们其实使⽤数组基本没有什么障碍了,如果我们要深入了解数组,我们最好能了解⼀下数组在内存中的存储。
依次打印数组元素的地址:
#define _CRT_SECURE_NO_WARNINGS

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

让我们看看输出结果:

从输出的结果我们分析:
数组随着下标的增⻓,地址是由⼩到⼤变化的,并且我们发现 每两个相邻的元素之间相差4(因为⼀个整型是4个字节)。所以我们得出结论:数组在内存中是连续存放的。这就为后期我们使⽤指针访问数组奠定了基础(在讲指针的时候我们在讲,这里暂且记住就行)。

5. sizeof 计算数组元素个数

那我们如何计算数组的元素个数呢
sizeof 中C语言是⼀个关键字,是可以计算类型或者变量大小的,其实 sizeof 也可以计算数组的
大小。
#include <stdio.h>

 int main()
 { 
     int arr[10] = { 0 };
     printf ("%d\n", sizeof(arr));
     return 0;
 }

输出为40,这⾥输出的结果是40,计算的是数组所占内存空间的总大小,单位是字节。

那我们怎样计算出arr[]的元素个数呢?

这时候有人就会想到用arr[]的字节去除以一个arr[0],是否就可以计算出来呢,实践开始:

#include <stido.h>

int main()
{
int arr[10] = {0};
int sz = sizeof(arr)/sizeof(arr[0]);
printf("%d\n", sz);
return 0;
}
结果不出所料:10。是不是简单的呢,那我们学习完了一维数组的基础,是不是觉得难度对你来说是不是有点简单了,那我们再接再厉,继续二维数组的学习吧

6. ⼆维数组的创建

  二维数组

前面学习的这些数组被称为一维数组,数组的元素都是内置类型的,如果我们把一维数组做为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组被称为三维数组,二维数组以上的数组统称为多维数组。
如:

 ⼆维数组的创建

那我们如何定义二维数组呢?语法如下:
type arr_name[常量值1][常量值2]; 
例如:
int arr[4][6];
double data[3][6];
解释:上述代码中出现的信息
• 4表示数组有3行
• 6表示每一行有6个元素
• int 表示数组的每个元素是整型类型
• arr 是数组名,可以根据自己的需要指定名字
data数组意思基本⼀致。

 

二维数组与一维数组一样存在(完全,不完全,按照型初始化)

按照型初始化

如:int arr4[3][5] = {{1,2},{3,4},{5,6}}

12000
34000
56000

明白了吗.注意:初始化时省略行,但是不能省略列 :int arr[ ][5] = {1,2,3,4,5,6,7}

既然我们已经了解到了数组,那我们回到上节课的问题中 

7.二维数组的使用

二维数组的输入和输出

其实我们只要能够按照⼀定的规律产生所有的行和列的数字就行;以上一段代码中的arr数组为例,行的选择范围是0~2,列的取值范围是0~4,所以我们可以借助循环实现生成所有的下标。
#include <stdio.h>
int main()
{
    int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
    int i = 0;                  
    for (i = 0; i < 3; i++) 
    {
        int j = 0;
        for (j = 0; j < 5; j++) 
        {
            scanf("%d", &arr[i][j]);             //输入数据
        }
    }




    for (i = 0; i < 3; i++) 
    {
        int j = 0;
        for (j = 0; j < 5; j++)
        {
            printf("%d ", arr[i][j]);              //输出数据
        }
        printf("\n");             //打印完5个数据后,换行
    }
    return 0;
}

这样我们就学会了二维数组的输入与输出!!!

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值