C语言-数组


数组是一类相同类型元素的集合。数组中 各数据的排列(注意是数据的排列而不是数据)是有一定的规律的,下标代表数据在数组中的序号。

在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数即数组长度。

一维数组

一维数组是由数字组成的以单纯的排序结构排列的结构单一的数组。创建一维数组的一般形式为

类型说明符  数组名[常量表达式]//只要是常量表达式就是合法的,但是不能包含变量,如int[n]是不对的
例如 int a[10]

定义一个一维数组,也就意味着在内存中划出一段空间来存放10个整型元素,如图所示:
在这里插入图片描述
当我们想要引用数组中某个元素时就可以通过数组名[下标]的形式进行引用,但是注意,数组下标是从0开始的

int a[10] = {12345678910};
     下标依次为 0  1  2  3  4  5  6  7  8  9

在屏幕上打印出数组的第一个元素:

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("%d",arr[0]);
	return 0;
}

顺理在屏幕上输出下标为0的元素
在这里插入图片描述

一维数组初始化

初始化数组就是在创建数组的同时给数组内容赋一些合理的初始值

eg:
   //可以在定义数组时对全部元素赋初值
    int a1[10] = {1,2,345678910};
    char a2[3] = {'a','b','c'};
   //也可以只给一部分元素赋初值
    int a3[10] = {1,2,3};
   //当数组元素个数已经确定时,我们也可以不指定数组长度
    int a4[] = {1,2,3,4,5,6,7,8}
    

❗我们在定义 数值型数组 时数组长度已经指定但未初始化或没有初始化完全时,凡是没有被初始化的元素,系统会将他们自动初始化为0,如果是指针数组,则初始化为NULL即空指针;如果是字符型数组那就初始化为’\0’。

一维数组在内存中的存储

想要研究清楚数组在内存中是如何存储的,那我们需要知道数组中各个元素的地址,看他们之间有什么联系

#include <stdio.h>
int main()
{
 int arr[10] = {0};
 int i = 0;
 for(i=0; i<sizeof(arr)/sizeof(arr[0]); ++i)//这里的sizeof(arr)/sizeof(arr[0]是为了算出数组中一共有多少元素
 {
 printf("&arr[%d] = %p\n", i, &arr[i]);//按顺序打印数组中每个元素的地址
 }
 return 0;
}

得出结果
在这里插入图片描述
由此我们可以看出一维数组在内存中是连续存放的

二维数组

二维数组其实本质上就是以数组作为数组元素的数组,即数组的数组.

定义一个二维数组与一维数组相似

类型说明符  数组名[常量表达式][常量表达式]
例如 int a[3][3]//以上定义了一个int型的二维数组,第一行有3个元素,第二行有3个元素

二维数组其实可以看做一种特殊的一维数组,
例如我们可以把a看成一个一维数组,他有三个元素,而每个一维数组包含3个元素
在这里插入图片描述

二维数组的初始化

以下是对二维数组初始化的几种方式

    //分行给二维数组赋初值
    int arr[3][3] = {{1,2,3},{4,5,6}{789}};
    //将所有元素写在一个括号内
	int arr[3][3] = {1,2,3,4,5,6,7,8,9};
	//也可只对部分元素初始化
	int arr[3][3] = {{1},{2},{3}};

注意我们在初始化二维数组时,只能省略第一维的长度,不可以省略第二维的长度

二维数组在内存中的存储

我们知道了一维数组是如何在内存中存放的,接下来我们来探究一下二维数组在内存中的
我们打印二维数组中各元素的地址

#include <stdio.h>
int main()
{
 int arr[3][4];
 int i = 0;
 for(i=0; i<3; i++)
 {
 int j = 0;
 for(j=0; j<4; j++)
 {
 printf("&arr[%d][%d] = %p\n", i, j,&arr[i][j]);
 }
 }
 return 0;
}

结果显而易见
在这里插入图片描述
从这段代码的结果不难看出,二维数组中元素排列也是按顺序排放在一起的,及在内存中先存放第一行的元素,接着再存放第三行的元素。。。
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值