一维、二维数组基础以及与指针的结合

目录

一、一维数组

1.数组的介绍

2.初始化一维数组

标准初始化

不确定长度

3.元素的赋值

二、二维数组

初始化二维数组与运用

三、数组与指针

1.指针与一维数组的结合

2.指针与二维数组的结合

四、总结


前言:
我在写本篇文章之前,阅读了一些书籍结合自己的见解,致力于帮助读者更好的理解和掌握一维,二维数组以及和指针的结合
加油(* ̄︶ ̄)

一、一维数组

当遇到连续相同类型的数据并且作用相同时,你会不会一个一个定义,例如要表示一年中每个月的天数,你会不会这样定义:

int a1 = 31;
int a2 = 28;
int a3 = 31;
……

那这样就太麻烦了。对于这种情况,c提供了一维数组来解决,现在正式进入一维数组

1.数组的介绍

数组就是由数据类型相同的一系列元素组成。也就是里面可以存放类型相同并且连续的数据,就不用一个一个去定义了,省时,省力,还简洁。

    int a[10];
    double b[20];

其中的数组a,存储了10个连续int型数据
其中的数组b,存储了20个连续double型数据

我们可以通过下标来获取对应元素的值。
注意:下标是从0开始,上方的数组a一共有10个元素,但是下标从0开始,那么下标引用的范围为:a[0] ~ a[9]

2.初始化一维数组

拿上面的例子,初始化每个月的天数的数组

int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

是不是很简洁,这里相当于定义了一个days数组,里面一共有12个int型的连续数据,边并且都初始化值了

所以初始化数组的格式为:

  • 标准初始化

类型 数组名[ 3 ] = { 值, 值2, 值3 };

这里要注意的点:
a.确定了初始化的值,就一定要小于等于确定数组的长度

        例如上方的例子,在初始化当中,只能小于等于3

b.当初始化值小于数组长度时,空着的数据为0
        例如上方的 2号元素为0
c.数据间用逗号分隔

  • 不确定长度

        即不在“中括号”中指定长度,那么它的长度就是赋初值后的元素个数,例如:

int  a[ ] = { 1, 2, 3, 4, 5 };

这里数组a中有5个元素值,那么这个数组的长度就为5,即中括号里相当于写了个5

3.元素的赋值

第一种方法就是上面的赋初值

还可以通过数组下标来赋值,例如:

int a[5];
int b[5];
//通过for循环来完成a数组的赋值
for( int i = 0; i < 5; i++ )
{
    a[i] = i;
}

//直接将数组赋值给数组不允许,是错的!!!
b = a; XXX

//数组元素可以给数组元素赋值
b[0] = a[0];

注意:

a.数组不能越界,上面的例子中,如果给a[5]赋值则会出错

b.不能直接将数组直接赋值给另一个数组但是元素可以

        例如上方 b = a; 是错的

        b[0] = a[0];是对的

二、二维数组

二维数组实际上是由多个一维数组组成的,看个栗子🌰

int a[2][3];

相当于创建了一个2行3列的二维数组
这里要知道,先行后列

初始化二维数组与运用

写法一 :两个大括号
int a[2][3] ={ { 1, 2, 3 }
               { 4, 5, 6 }
             }

写法二:一个大括号
int a[2][3] ={ 1, 2, 3,
               4, 5, 6 }
             

写法一和写法二区别就在里面的大括号
都表示:
定义了两行三列的数据,其中
第一行的数据为:1,2,3

第二行的数据为:4,5,6

也可以这么形容:

这里定义了两个拥有三个数据的一维数组
看个图加深你的理解

这里有2个注意的点:

a.二维数组名,可以看做指向二维数组,那如何引用二维数组的值呢?
   也是用下标,图中标明了下标位置
    例如:a[0][1]  那么值就是2
               a[1][2] 的值就是6

b.二维数组想象成平面的,是为了更好的理解它,而它实际存储的是连续的
   如图中的那个样子

三、数组与指针

首先记住一个概念:数组名就是数组首元素的地址
当知道了这个,就能够和指针关联起来了,指针是指向一个地址
那么数组名就是首元素的地址,直接将指针指向数组不就可以了,看样子感觉还挺简单的😊

1.指针与一维数组的结合

int a[3] = { 1, 2, 3 };
int *p = a;

这里相当于是指针p指向数组a
也可以看成:
int *p = &a[0]   //首元素地址

p[1] == a[1]  这是等价的
那如果你不想指向首元素地址,怎么办呢?
int *p = &a[i]; 注意i的取值范围:i >= 0 && i <3
即数组名加几就是几号元素

2.指针与二维数组的结合

指针与二维数组结合和一维结合是差不多的,就是多了几个要注意的点


还是拿上面那个二维数组为例,这里可以理解为,这个二维数组由两个一维数组组成
一个一维数组是a[0],另一个一维数组是a[1]。
那么a[0]和a[1]就是这两个一维数组的数组名

所以就可以知道:

  • a[0]是数组名,那它的首元素呢?

        那么就和一维数组的操作一样了,即a[0][0]
        a[1]的首元素也同理是 a[1][0]

  • 那a[0]的地址是什么?

        和一维数组同理:&a[0][0]

        a[1]也同理:&a[1][0]

四、总结

 如果本文对您有帮助,别忘了点赞收藏关注哈,您的这一支持将是我不断前进的动力

关注我一波哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值