当前位置: 首页 > web >正文

C语言——数组

C语言——数组

1.数组的概念:

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

  • 数组中存放的是1个或多个数据,但是数组元素不能为0。
  • 数组中存放的多个数据,类型是相同的。
  • 其分为一维数组和多维数组

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

数组创建:

  • 基本语法如下:
type arr_name[常量值];

其中,type为数组的元素类型 ,arr_name为数组名,常量值为数组的元素个数。
例:

int math[20];//整型数组
char ch[10];//字符数组
  • 数组的初始化
int arr[5]={1,2,3,4,5};//完全初始化
int arr2[6]={1};//不完全初始化
int arr[3]={1,2,3,4};//错误初始化,因为放不下
char ch1[10]="hello";//字符串的初始化,(仅此可用“”)
char ch2[10]={'h','e','l','l','o'};//字符的初始化
//数组只要初始化了,就可以省略掉数字的大小
//数组的大小会根据初始化的内容来判断
  • 数组的类型

    数组算是一种自定义类型,去掉数组名留下的就是数组的类型

3.一维数组的使用

  • 打印数组的长度
int arr1[10];//10*4=40
printf("%zd\n",sizeof(arr1));//结果是40,计算的是整个数组的大小,单位是字节
  • 数组下标
    1.C语言规定数组是有下标的,下表是从0开始的,假设数组有n个元素,最后一个元素的下标是n-1,下标就相当于数组元素的编号,如下:
int arr[10]={1,2,3,4,5,6,7,8,9,10};

其对应的下标就为:[ ]为下标引用操作符
在这里插入图片描述

  • 数组的输入(输出同理)
int main(){int arr[8]={0};int i=0;for(i=0;i<7;i++){scanf("%d",&arr[i]);}return 0;
}
  • 数组的地址(数组的元素在内存中是连续存放的)
int arr[8]={0};
int i=0;
for(i=0;i<8;i++){
printf("&arr[%d]=%p\n",i,&arr[i]);
}

结果:
在这里插入图片描述
解释:×64:配置成64位环境,编译出来的是64位程序,只能在64位环境中运行;×86:配置成32位环境,编译出来的是32位的程序,32位,64位环境中都能运行。

  • sizeof计算数组的元素个数
int arr[20]={0};
int i=0;
printf("%zd\n",sizeof(arr)/sizeof(arr[0]));//计算一个元素的长度

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

  • 概念:数组的元素都是内置类型的,如果把一维数组作为数组的元素,这时候就是二维数组。多维数组同理
    在这里插入图片描述
  • 二维数组的创建:语法如下
type arr_name[常量值1][常量值2];
例如:
int arr[3][5];//3表示数组有三行,5表示每一行有5个元素
double date[2][8];
  • 二维数组的初始化行可省,列不可省
int arr1[3][5]={1,2};//不完全初始化
int arr2[3][5]={0};
int arr3[3][5]={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7}//完全初始化
int arr4[3][5]={{1,2},{3,4},{5,6}}//分别放到每一行,剩下的自动补0
  • 二维数组的元素输入和输出
//输入:(输出同理)
int i=0;
for(i=0;i<3;i++){int j=0;for(j=0;j<5;j++){scanf("%d",&arr[i][j]);}}

二维数组在内存中也是连续存放的

5.C99中的变长数组

  • 引入:在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量,常量表达式,或者如果我们初始化数据的话,可以省略数组的大小,这样的语法限制让数组不够灵活,有时候数组大了浪费空间,有时候数组小了不够用,因而引入C99中给的一个变长数组 的新特性,允许我们可以使用变量指定数组的大小,变长数组不能初始化,运行时才能知道大小。
  • 使用VS2022默认使用的msvc编译器,不支持C99中的变长数组,解决方法:gcc和苹果的clang编译器支持,而vs2022中可以使用clang。
int main()
{int n=0;scanf("%d",&n);int arr[n];//切记变长数组不能初始化int i=0;for(i=0;i<n;i++){arr[i]=i;}for(i=0;i<n;i++){printf("%d",arr[i]);}

允许程序运行时指定大小,变长数组一旦确定大小后就不能在改变了。
在这里插入图片描述

http://www.xdnf.cn/news/943.html

相关文章:

  • Sentinel源码—7.参数限流和注解的实现二
  • 字符串拼接问题的最佳解决方案
  • Shell常用功能详细使用
  • STM32 栈地址起始位置不正确
  • 【GIT】为什么要变基下拉,变基下拉失败,提示没有暂存如何解决?
  • 华为OD机试2025A卷七日集训第6期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)
  • Transformer系列(三):Transformer架构
  • Spring Boot
  • Batch Size
  • MySQL 按照日期统计记录数量
  • VOS3000内存满了怎么删除,录音格式如何转换呢
  • JVM 内存分布详解
  • 基于Spring Boot+微信小程序的智慧农蔬微团购平台-项目分享
  • 存储器综合:内存条
  • GAIA-2:用于自动驾驶的可控多视图生成世界模型
  • 基于大模型的腹股沟疝全流程预测与诊疗方案研究报告
  • 杭电oj(2031、2033、2070、2071、2075、2089、2090、2092、2096)题解
  • 学习笔记(C++篇)--- Day 3
  • 掌握Go空接口强大用途与隐藏陷阱
  • 14.QT-多元素控件|QListWidget|QTableWidget|QTreeWidget(C++)
  • SpringBoot整合JWT Token:构建安全无状态认证体系的最佳实践
  • QGraphicsItem的shape和boundingRect方法
  • HarmonyOS:Navigation实现导航之页面设置和路由操作
  • 【 Git 全局忽略文件完全指南:配置、规则与最佳实践】
  • 电商数据自动化采集方案:淘宝商品详情 API 接入与数据处理技巧
  • Spring(第一章)
  • 基于LangChain4J的AI Services实践:用声明式接口重构LLM应用开发
  • 基于陀螺仪的智能防抖平台设计与实现:从硬件到算法的全流程解析
  • 基于Springboot的自习室预约系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • MongoDB数据库的安装到入门使用详细讲解