目录

1. 一维数组的创建和初始化。

1.1 数组的创建

1.2 数组的初始化

1.3 一维数组的使用

1.4 一维数组在内存中的存储

2. 二维数组的创建和初始化

2.1 二维数组的创建

2.2 二维数组的初始化

2.3 二维数组的使用

2.4 二维数组在内存中的存储

3. 数组越界

4. 数组作为函数参数

4.1数组名是什么?

1. 一维数组的创建和初始化。

1.1 数组的创建

数组是一组相同类型元素的集合

eg:int arr[ 7];

int 表明元素集合的类型,arr是数组名,同时也是数组首个元素的地址,[ ]里面表示数组元素的个数。 

注:数组的创建,在C99标准之前, [ ] 中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念。

1.2 数组的初始化

数组的初始化是指:在给定数组的同时并对它进行合理的赋值。(初始化)。数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初始化的内容来确定。

1.3 一维数组的使用

之前我们在操作符那一节提到一个下标引用操作符:[ ];它其实就是数组访问操作符。

数组是通过使用使用下标来进行访问的,下标是从0开始的。

int a[5]={0};//对a数组初始化
int sz=sizeof(a)/sizeof(a[0]);//计算数组a的长度
a[1]=7;//就是引用后对数组a的第二个元素进行赋值

1.4 一维数组在内存中的存储

#include <stdio.h>
int main()
{int a[10] = {0};//对数组a初始化int i = 0;int sz = sizeof(a)/sizeof(a[0]);//计算数组长度for(i=0; i<sz; ++i)//最大到该数组的长度{printf("&a[%d] = %p\n", i, &a[i]);//依次输出该数组的每个元素的地址}return 0;
}

                                                                     仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增。 由此可以得出结论:数组在内存中是连续存放的。

2. 二维数组的创建和初始化

2.1 二维数组的创建

//数组创建
int arr[3][4];
char arr[][5];
double arr[2][2];

二维数组是按行存放的,前面的[ ]里面的可以空着,后面的[ ]不可以空着

2.2 二维数组的初始化

//数组初始化
int arr[][4] = {1,2,3,4};
int arr[3][3] = {{1,2},{4,5}};
int arr[][3] = {{2,3},{4,5}};//二维数组如果有初始化,行可以省略,列不能省略

2.3 二维数组的使用

二维数组的使用也是通过下标的方式访问。

2.4 二维数组在内存中的存储

同一维数组一样,我们依次打印出二维数组的地址,然后分析二维数组的特点。

#include <stdio.h>
int main()
{int arr[3][4];//定义数组arr int i = 0;for(i=0; i<3; i++)//限制i小于等于列数 {int j = 0;//定义行 for(j=0; j<4; j++)//限制行数 {printf("&arr[%d][%d] = %p\n", i, j,&arr[i][j]);//依次打印出二维数组的地址 }}return 0;
}

通过结果我们可以分析到,其实二维数组在内存中也是连续存储的。

3. 数组越界

数组的下标是有范围限制的。

C语言数组的下标规定从0开始,如果该数组中有n个元素,下标最大就是n-1。

所以数组的下标如果小于0,或者大于n-1,就是数组访问越界了,越界访问超出了数组合法空间。

C语言本身是不做数组下标的越界检查,编译器也不一定报错,所以我们写代码时一定要注意检查数组是否越界访问。

注:二维数组中行和列也可能存在越界访问

4. 数组作为函数参数

4.1数组名是什么?

#include <stdio.h>
int main()
{int arr[10] = {1,2,3,4,5};printf("%p\n", arr);printf("%p\n", &arr[0]);printf("%d\n", *arr);//输出结果return 0;
}

结论:数组名是该数组首个元素的地址。(有两个例外)。

1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。

2. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组。

除此1,2两种情况之外,所有的数组名都表示数组首元素的地址。

数组作为函数参数传参的时候:形参可以写成两种形式!

1.数组形式

2.指针形式

int arr[10];
test(arr);//实参为数组
void test(int arr[])//形参是数组
void test(int *arr)//形参是地址

写在最后:

博主大一实力有限,内容仅供参考,欢迎大家在评论区和我交流!

以后会经常发有趣的小游戏,和学习心得,感兴趣的小伙伴可以点个关注支持一下!

一看就会的C语言数组(详解易懂)相关推荐

  1. c语言数组详解视频,C语言数组详解

    <C语言数组详解>由会员分享,可在线阅读,更多相关<C语言数组详解(55页珍藏版)>请在人人文库网上搜索. 1.就是一组具有固定数目的.有序的.类型相同的数据的集合.根据数组下 ...

  2. go语言查询某个值是否在数组中_Go语言数组详解

    数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成.因为数组的长度是固定的,所以在Go语言中很少直接使用数组. 和数组对应的类型是 Slice(切片),Slice 是可以增 ...

  3. c++ 数组置0_09c语言数组详解

    数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组. 在C语言中, 数组属于构造数据类型.一个数组可以分解为多个数组元素,这些数组 ...

  4. access vba 常量数组赋值_09c语言数组详解

    数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组. 在C语言中, 数组属于构造数据类型.一个数组可以分解为多个数组元素,这些数组 ...

  5. c语言 数组存放规则,C语言数组详解

    数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组.在C语言中, 数组属于构造数据类型.一个数组可以分解为多个数组元素,这些数组元 ...

  6. c语言定义不定长数组初始化_数组的定义,初始化和使用,C语言数组详解

    数组可以说是目前为止讲到的第一个真正意义上存储数据的结构.虽然前面学习的变量也能存储数据,但变量所能存储的数据很有限.不仅如此,数组和指针(后续会讲)是相辅相成的,学习数组可以为学习指针打下基础. 那 ...

  7. C语言0长度数组(可变数组/柔性数组)详解

    CSDN GitHub C语言0长度数组(可变数组/柔性数组)详解 AderXCoding/language/c/zero_length_array 本作品采用知识共享署名-非商业性使用-相同方式共享 ...

  8. python定义字符串数组初始化_字符数组及其定义和初始化,C语言字符数组详解...

    字符数组及其定义和初始化,C语言字符数组详解 字符串的存储方式有字符数组和字符指针,我们先来看看字符数组. 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别 ...

  9. Go语言slice详解

    Go语言slice详解 Go语言中的slice表示一个具有相同类型元素的可变长序列,语言本身提供了两个操作方法: 创建:make([]T,len,cap) 追加: append(slice, T -) ...

  10. C 语言教程详解——入门到精通

    C 语言是一种通用的.面向过程式的计算机程序设计语言.1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言. C 语言是一种广泛使用的计算机语言,它与 J ...

最新文章

  1. python逐个读取文件并处理_逐个读取多个文件并用python进行处理
  2. 微信小程序图片上传到服务器再自动替换,微信小程序批量上传图片到服务器,并实现预览,删除功能...
  3. 【免费】网易开卖CTO啦——开发者踩坑专场
  4. 请说明一下MyBatis中命名空间(namespace)的作用是什么?
  5. 没有varselect这个函数_C++的虚函数,虚析构函数,纯虚函数
  6. Java中List.forEach()方法使用
  7. linux系统ca证书认证失败修复过程记录
  8. 团队现场编程实战(抽奖系统)
  9. 蓝桥杯---试题 历届试题 填字母游戏(博弈)
  10. 【阿拉伯数字转中文汉字工具类】
  11. java版林地府邸种子_最好玩的5大林地府邸种子,手机党玩家的福利!
  12. 一篇文章教会你使用Python网络爬虫下载酷狗音乐
  13. 计算机毕业设计java+ssm妇女联合会信息网站(源码+系统+mysql数据库+Lw文档)
  14. 网易免费企业邮箱配置客户端
  15. C语言函数:错误信息打印函数,strerror()与perror()
  16. 【Robot学习 5 】ROS通信编程 待更新。。。
  17. 每日总结(第一天)(2020/3/27/22:11)(1/90)
  18. pse文本行检测_CVPR 2019 | 文本检测算法PSENet解读与开源实现
  19. 重复性工作再也不用做啦?机器人自动化迎难而上
  20. qimo linux 中文,DoudouLinux一个有趣的Linux发行版为孩子们 | MOS86

热门文章

  1. IDEA行前边有个对勾的解决方法
  2. 百度云云虚拟主机新用户体验活动:6元购买3个月香港主机
  3. 瑞昱Realtek(Realtek HD Audio Driver)音频声卡驱动R2.49 for Win7_Vista
  4. vue iview 输入银行卡号匹配开户行
  5. 笨办法学Python 3 习题4
  6. SharePoint\O365 CSOM操作请求访问设置功能
  7. 16.使用UltraISO制作linux系统安装u盘启动盘
  8. Python-apply(lambda x: )使用
  9. C++【算法】【动态规划问题】
  10. 【统计技术】运营商数据:三大运营商2012年1月手机用户数据