C语言数组全面总结梳理
目录
- 一,一维数组
- 1.创建和初始化
- 2.使用下标访问
- 3.在内存中的存储
- 二,二维数组
- 1.创建和初始化
- 2.使用下标访问
- 3.在内存中的存储
- 三,越界问题
一般形式:
类型数组名[常量表达式]
一,一维数组
1.创建和初始化
创建一堆相同元素的集合,以整型为例:
//创建大小为8的整型数组int arr1[8]; // []里面应放常量,因此若:int num=8; //则有:arr2[num]; num为变量,创建失败// 此时 arr1 != arr2
初始化就是合理赋值,有多种方式,合理即可:
//指定大小的初始化int arr1[3]={1,2,3}; //不指定大小的初始化int arr2[]={1,2,3}; //指定大小的不完全初始化int arr3[3]={1,2};
这里创建字符数组时应注意这种情况:
char arr1[] = {"abcdef"}; char arr2[] = {'a','b','c','d','e','f'};
这两种初始化看着内容相同,但 arr1 不等同于 arr2,这里我们用 strlen函数 分别求他们的字符串长度:
文章图片
arr1是我们能想到的,但是arr2却超出预料,原因是strlen遇到字符'\0' ('\0'为结束标志)结束读取,且打印出的个数里不算字符'\0'.
arr1字符串末尾f后面默认有结束标志,而arr2字符f后面无结束标志,为随机值,strlen必须读取到'\0'才会结束读取,因此读取到的为随机数。
//改写arr2为:char arr2[] = {'a','b','c','d','e','f','\0'};
那么结果:
文章图片
2.使用下标访问
数组是用 [] 来进行下标访问的,数组下标从0开始。
如:
arr1[3]={1,2,3};
则数据的下标为:0 1 2一一对应
写个栗子,分别打印
int arr2[5]={1,2,3,4,5};
的每个元素注:
int sz = sizeof(arr2) / sizeof(arr2[0]);
//通过字节计算元素个数,确定判断条件 因为已经知道了元素个数里可省略 直接令 i<5.#include int main(){ int i = 0; int arr2[5] = { 1, 2, 3, 4, 5 }; //创建数组arr2并初始化 int sz = sizeof(arr2) / sizeof(arr2[0]); //通过字节计算元素个数,确定判断条件 for (i = 0; i < sz; i++) {printf("%d ",arr2[i]); 下标从0开始,依次访问每个元素 } return; }
3.在内存中的存储
由上面的栗子我们直接打印数组每个元素的内存:
文章图片
观察不难发现每个元素间相差四个字节,且地址由低到高。
得到结论:数组在内存中是连续存放的。
二,二维数组 1.创建和初始化
一般形式:
类型数组名[常量表达式][常量表达式]
//数组创建int arr[3][4]; //三行四列char arr[3][6]; //三行六列
一维是单行,这里可将二维理解为行列
初始化也与一维数组没多少差别:
//指定大小的初始化int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //不指定大小的初始化,(行可不指定,但列不可省略,必须指定)int arr2[][6]={1,2,3}; int arr3[][4]={{1,2},{3,4},5,6,7,8,9}; //赋值中{}里面的{}可代表一行的内容 //指定大小的不完全初始化int arr4[3][2]={1,2,3};
不完全初始化的值为0
【C语言数组全面总结梳理】
文章图片
2.使用下标访问
二维数组的访问就很有意思将二维数组看成行列 用坐标来访问
以
int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
三行四列为例:文章图片
文章图片
注:列和行的下标都是从0开始
比如我们想打印6,那么应该是arr1[1][1],而不是arr1[2][2].
文章图片
3.在内存中的存储
继续以arr1为例:
文章图片
地址依旧是连续的,由低地址到高地址。
三,越界问题 例如:
创建一个数组
int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
访问时行不能<0 或 >=3,列不能<0 或 >=4,否则就是数组越界。编译代码时,越界不一定会报错,注意自己检查。
到此这篇关于C语言数组全面总结梳理的文章就介绍到这了,更多相关C语言 数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 数组常用方法一
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- Java|Java基础——数组
- C语言解方程的根和判断是否是闰年
- C语言的版本比较