什么是数组?数组是由相同类型(记住是相同,不同类型不可以)的一系列数据组成。基本上C语言变量可用的类型,在数组也可使用。

数组的语法如下:

类型 数组标识[长度] ,其中数组的长度或元素个数用方括号括起。如:int arr1[10],声明了10个元素的数组。

  • 数组的初始化用花括号把数据括起来,每个数据以逗号分隔。如:int arr1[5] = {1,2,3,4,5}。其中 {1,2,3,4,5}为初始化列表
  • 数组要赋值或使用,需要通过数组的下标(索引)的方式,且数组的下标是从0开始到数组长度减1结束。如:printf("%d\n", arr1[0]); 就是打印数组arr1的第1个元素,arr1[4]就是数组的第5个元素。C语言编译器不会检查数组下标是否正确,如果不正确的数组下标就会出现下标越界,会导致程序异常退出。如:arr1[-1]、arr1[6]等,因为这个下标不存在。
  • 数组所占用的字节为:数组类型的所占用的字节大小 * 数组元素个数。如上面arr1长度为5的数组它所占用的字节为:sizeof(int) * 5 = 20Byte
  • 数组整体是不能被赋值的(即使长度、类型相同也不可以),如把 int arr1[5] 赋值给 int arr2[5]
  • 数组之间可通过两种方法实现复制:1、利用循环把每个元素赋值给另一个数组元素;2、利用memory.h头文件声明的memcpy函数进行复制。

来段代码:

#include <stdio.h>
#include <memory.h> //使用了memcpy函数,因此导入相关的头文件
/*
时间:2022-04-10 15:48
作者:sgbl888
功能:学习一维数组
知识点:1、数组下标从0开始,要注意下标越界问题(编译器不会检查是否越界,若越界会导致程序异常退出)2、数组使用前须初始化,否则可能是垃圾值,会导致计算结果不正确3、数组不能整体赋值(即使长度、类型相同也不可以)4、数组复制可使用memcpy函数(引入memory.h头文件)或使用循环逐个赋值5、整个数组所占用的字节大小 = 单个数组元素所占用的字节 x 数组元素个数6、初始化列表只能在声明时使用,不能在赋值时使用
*/
#define MONTHS 12 //一年12个月
int main(){//声明指定长度的数组//int year[MONTHS] = {1,2,3,4,5,6}; //初始化列表只给6个元素值,后面6个元素值由编译器填充为0int year[MONTHS] = {1,[1]=2,3,4,5,6}; //c99标准支持指定给下标的元素赋值//year = {2,3,4,5,6}; //错误的,不能使用初始化列表进行赋值int i;for(i = 0; i < MONTHS; i++){ //下标从0开始,因此i初始值设置为0printf("%d \t", year[i]); }printf("\n-----------------------\n");//根据初始化列表,自动设置数组大小的数组char y [] = {}; //并非是空数组,等同于 int y[] = {0},只有一个元素的数组char x [] = {1,3,5,7,9}; //数组x大小为5,从0-4printf("%d\n", y[0]);printf("\n-----------------------\n");//数组整体赋值演示char a1[5];//a1 = x; //错误,不能整体赋值,虽然数组大小、类型相同也是不可以的//下标越界演示//printf("%d\n", a1[6]); //这两种都是错误的,因为数组下标从0开始到长度-1。//printf("%d\n", a1[-1]);//数组所占用的字节计算printf("\nyear数组所占用的字节为:%d Byte\n", sizeof(int) * MONTHS); //因为有12个元素,int类型占用4字节。结果为48个字节printf("\n-----------------------\n");//数组整体复制的两种方法:循环赋值、memcpy函数for(i = 0; i < 5; i++){a1[i] = x[i]; //把x的第i个元素赋值给a1的第i个元素printf("%d\n", a1[i]); //打印是否成功}printf("\n-----------------------\n");//使用memcpy函数复制数组char a2[5];memcpy(a2, a1, sizeof a1); //第一个参数为目标数组,第二个参数为原始数组,第三个参数为要复制的字节数(非数组个数)printf("%d\n", a2[2]); //打印出5,说明复制成功return 0;
}

C语言:初识数组及数组的复制相关推荐

  1. C语言初阶(18) | 数组详解

    目录 1.数组的定义 2.一维数组 2.1一维数组的格式 2.2一维数组的初始化 2.3一维数组的使用 2.4一维数组再内存中的存储 3.二维数组 3.1二维数组的创建和初始化 3.2二维数组的使用 ...

  2. 【C语言】深入理解数组和指针——初识指针

    哈喽大家好,我是保护小周ღ,C语言,接下来给大家带来的是深入理解数组和指针的初识指针,这篇主要讲的是基础指针的相关知识,是博主的所见所闻,细节上的知识后面会这里面没有提,会放在后期的文章中与数组相结合 ...

  3. 二维数组 类型_「初识C语言」二维数组

    一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量.在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量. ...

  4. 【老九学堂】【初识C语言】二维数组

    一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量.在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量. ...

  5. C 语言编程 — 高级数据类型 — 数组

    目录 文章目录 目录 前文列表 数组 声明数组 初始化数据 访问数组元素 二维数组 指向数组的指针 将数组指针作为实参传入函数 从函数返回一个数组指针 指针数组 数组名和取数组首地址的区别 前文列表 ...

  6. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  7. 5、C语言面试笔试--数据组织--数组

    文章目录 1.一维数组 2.一维数组和指针的区别 3.sizeof的使用 4.二维数组 5.用一级指针访问二维数组元素 6.字符数组和字符串数组 7.strlen函数与sizeof运算符号的差别 8. ...

  8. 【汇编语言】8086、x86-32和C语言【赋值语句 和 数组】的对比学习(王爽学习笔记:5.8段前缀的使用)

    0 前言 这里给出两种思路,都比王爽老师书上的做法要简单高效,事实上,理解指令的本质,就能达到灵活应用,这样才能打破规则 题目:将内存ffff:0 - ffff:b的数据,复制到内存ffff:10 - ...

  9. C语言反汇编 - 多维数组与指针

    反汇编(Disassembly) 即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高 ...

最新文章

  1. winform chart 添加数据报错_C# win Form开发 构造指定格式数据表字段值
  2. html 的empty属性,你未必知道的CSS小知识:你知道table里的empty-cells属性吗?
  3. [JZOJ5281]钦点题解--瞎搞+链表
  4. 【备用】关于BOM替代物料与CK11N取数逻辑
  5. 如何用 Redis 实现延迟队列?
  6. jzoj3771-小Z的烦恼【高精度,数学】
  7. (转) Oracle性能优化-读懂执行计划
  8. The 2nd AI on Fashion and Textile International Conference 2019
  9. 老司机和驾驶辅助系统相处得如何?MIT研究人员做了个科学研究
  10. Oracle笔记(一) Oracle简介及安装
  11. adb shell 直接修改Settigns中设置项
  12. python异步线程算法应用_Python多线程----线程池以及线程实现异步任务
  13. [数分提高]2014-2015-2第1教学周第2次课
  14. HPU 图书馆占座 python
  15. 联想微型计算机安装Win7,联想一体机如何安装win7_联想一体机怎么使用u盘重装win7...
  16. 三菱FX系列PLC数据采集和点表自动侦测
  17. 修改Windows10的主题色(文件夹也会改变)
  18. 超实用后台UI模板有这些就够了!(二)
  19. 浏览器表单自动填充问题【兼容性解决方案】
  20. 在高德地图 Android SDK上添加GeoServer发布的WMS图层

热门文章

  1. 结构体 7.公共钥匙盒
  2. k8s Canal (by quqi99)
  3. STC15系列PWM中断控制寄存器介绍以及PWM相关示例
  4. 全方位认识CityMaker8:让你在3D平台选型上少走弯路
  5. 初识CityEngine
  6. 无线测速系统 便利智能交通
  7. 【Java中方法的使用】
  8. 《高性能MySQL 第四版》正式上市
  9. Mybatis-plus分页查询不生效之问题排查
  10. 4个口碑贼好的微信小程序,低调收藏,免费使用!