C语言菜鸟入门·数组简介

目录

1.  简介

2.  声明数组

3.  初始化数组

3.  访问数组元素

4.  获取数组长度

5.  数组名


1.  简介

        在 C 语言中,数组是一种用来存储相同类型数据元素的集合。数组提供了一种便捷的方式来管理一系列相同类型的数据,可以按照索引来访问和操作数组中的元素。

以下是关于 C 语言数组的一些重要特点和注意事项:

1、声明数组:在 C 语言中声明数组时,需要指定数组的类型和大小。例如,int arr[5]; 声明了一个包含 5 个整数元素的数组。

2、初始化数组:可以在声明数组的同时初始化数组元素,也可以在之后的代码中逐个赋值。例如,int arr[5] = {1, 2, 3, 4, 5}; 初始化了一个包含 5 个整数元素的数组。

3、访问数组元素:可以使用数组下标(从 0 开始)来访问数组中的元素。例如,int x = arr[2]; 将数组 arr 中索引为 2 的元素赋值给变量 x

C 中的数组

4、数组越界:在访问数组元素时,应该确保不要越界,即不要访问超出数组范围的元素,否则会导致未定义行为或程序崩溃。

5、多维数组:C 语言支持多维数组,可以是二维、三维甚至更高维度的数组。多维数组的元素排列方式和访问方法稍有不同。

6、数组名称:数组名实际上是数组首元素的地址,可以用于表示整个数组。但在大多数情况下,数组名会转换为指针常量,不能被修改。

7、数组与指针:数组在很多情况下表现得像指针,但二者并不完全相同。数组名不能直接赋值给其他数组,而指针可以进行赋值操作。

2.  声明数组

        在 C 语言中,声明数组需要指定数组的类型、名称和长度。例如:        

int my_array[10];   // 声明了一个名为 my_array 的整型数组,长度为 10

        这里的类型是 int,名称是 my_array,长度是 10。注意:数组下标从 0 开始,因此 my_array 的有效下标范围是 0 到 9。

        也可以在声明数组时初始化数组元素,如下所示:

int my_array[] = {1, 2, 3, 4, 5};   // 声明并初始化一个整型数组

        这里的类型是 int,名称是 my_array,数组长度由初始化列表决定,即为 5。如果没有显式指定数组长度,编译器会根据初始化列表中的元素个数自动计算数组长度。

还可以使用 memset 函数来清零数组或者给数组初始化一个特定的值,例如:

int my_array[10];
memset(my_array, 0, sizeof(my_array));   // 将 my_array 中的所有元素清零

int my_other_array[5];
memset(my_other_array, 0xFF, sizeof(my_other_array));   // 将 my_other_array 中的所有元素初始化为 0xFF

3.  初始化数组

在 C 语言中,可以使用以下方式初始化数组:

指定元素列表:

int array[5] = {1, 2, 3, 4, 5};

        这里的 array 是一个整型数组,长度为 5,其中的元素为 1、2、3、4 和 5。

如果不指定数组长度,编译器会根据初始化列表中的元素个数自动计算数组长度:

int array[] = {1, 2, 3, 4, 5};   // 等价于 int array[5] = {1, 2, 3, 4, 5};

使用循环语句初始化数组:

int array[5];
for (int i = 0; i < 5; i++) {
    array[i] = i + 1;
}

        这里的 array 是一个整型数组,长度为 5,其中的元素为 1、2、3、4 和 5。

使用 memset 函数初始化数组:

#include <string.h>

int array[5];
memset(array, 0, sizeof(array));   // 将数组所有元素初始化为 0

        这里的 array 是一个整型数组,长度为 5,其中的元素被初始化为 0。

        需要注意的是,在 C 语言中,数组下标从 0 开始。因此,对于长度为 n 的数组,其有效下标范围是 0 到 n-1。

3.  访问数组元素

        在 C 语言中,可以通过数组的下标来访问数组元素。数组的下标从 0 开始,即第一个元素的下标为 0,第二个元素的下标为 1,依此类推。以下是一些示例代码来演示如何访问数组元素:

int array[5] = {10, 20, 30, 40, 50};

// 访问数组元素
int element1 = array[0]; // 获取第一个元素,值为 10
int element3 = array[2]; // 获取第三个元素,值为 30

// 修改数组元素
array[1] = 25; // 将第二个元素的值修改为 25

// 使用循环遍历数组
for (int i = 0; i < 5; i++) {
    printf("array[%d] = %d\n", i, array[i]);
}

        在上面的示例中,我们定义了一个包含 5 个元素的整型数组 array,并初始化了数组的值。然后通过 array[index] 的方式来访问数组的特定元素,其中 index 为数组的下标。可以将特定元素的值读取出来或者修改它的值。最后,使用循环遍历数组并输出每个元素的值。

        请记住,要确保访问数组元素时不要越界,即数组下标不能超出数组的有效范围。

4.  获取数组长度

        在 C 语言中,要获取数组的长度,可以使用 sizeof 运算符。sizeof 运算符返回其操作数的字节大小,并通常用于获取数组的长度。以下是一些示例代码来演示如何获取数组的长度:

int array[] = {1, 2, 3, 4, 5};
int length = sizeof(array) / sizeof(array[0]);
printf("数组的长度为:%d\n", length);

        在这个例子中,我们没有明确指定数组的长度,而是让编译器根据初始化列表中的元素个数自动计算数组的长度。然后,通过 sizeof(array) / sizeof(array[0]) 来计算数组的长度。sizeof(array) 返回整个数组占用的字节数,sizeof(array[0]) 返回数组中第一个元素的字节数。所以将数组占用的总字节数除以单个元素的字节数,就可以得到数组的长度。

        请注意,这种方法仅对在同一作用域内声明的数组有效。如果数组是通过指针传递给函数的,那么 sizeof 将返回指针的大小,而不是数组的大小。

5.  数组名

        在 C 语言中,数组名实际上是一个指向数组第一个元素的常量指针。当我们声明一个数组时,数组名代表数组的起始地址,也就是指向数组第一个元素的指针。因此,可以将数组名视为指向数组的指针常量。

以下是一些关于数组名的基本概念:

数组名作为指针使用

int array[5] = {10, 20, 30, 40, 50};
int *ptr = array; // 将数组名赋值给指针

        在这个例子中,array 表示数组 array 的第一个元素的地址,因此可以将 array 直接赋值给指针变量 ptr

数组名的地址:

printf("数组的地址:%p\n", array);

        这里输出的是数组 array 的地址,即第一个元素的地址。

数组名不能被赋值:

        虽然可以将数组名用作指针并将其赋值给指针变量,但不能直接对数组名进行赋值操作,因为在 C 语言中数组名是常量,不可被修改。

Visual Studio编辑器中C4996 ‘scanf‘: This function or variable may be unsafe.问题解决方案-CSDN博客

C程序语法和结构-CSDN博客

C数据类型-CSDN博客

C语言菜鸟入门·运算符(算数运算符,关系运算符,逻辑运算符,位运算符,赋值运算符,三目运算符)详细介绍_算术运算符、逻辑运算符、关系运算符-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/401296.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【免费雾锁王国】2024年新手搭建雾锁王国服务器教程

免费自建雾锁王国Enshrouded服务器&#xff0c;先领取阿里云300元无门槛代金券&#xff0c;然后在雾锁王国Enshrouded专题页一键部署&#xff0c;不需要基础&#xff0c;鼠标点选即可10秒钟创建一台雾锁王国游戏服务器&#xff0c;超简单&#xff0c;阿里云服务器网aliyunfuwuq…

Wireshark过滤DNS协议包语法实战

背景 现网DNS服务器发现CPU突增&#xff0c;发现有可能是客户恶意发起的随机子域名扫描&#xff0c;对服务器进行抓包分析&#xff0c;记录下当时的操作。 抓包 执行命令 tcpdump -iany port 53 and host $ip -nnv -w $ip.pcap进行抓包导出到本地&#xff0c;使用Wireshark进…

vue3中使用 tui-image-editor进行图片处理,并上传

效果图 下载包 pnpm i tui-image-editor pnpm i tui-color-picker调用组件 //html部分 <el-dialog v-model"imgshow" destroy-on-close width"40%" draggable align-center :show-close"true":close-on-click-modal"false">&l…

“成像光谱遥感技术中的AI革命:ChatGPT应用指南“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用&#xff0c;人工智…

Redis篇----第六篇

系列文章目录 文章目录 系列文章目录前言一、Redis 的持久化机制是什么?各自的优缺点?二、Redis 常见性能问题和解决方案:三、redis 过期键的删除策略?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

h5网页和 Android APP联调,webview嵌入网页,网页中window.open打开新页面,网页只在webview中打开,没有重开一个app窗口

我是h5网页开发&#xff0c;客户app通过webview嵌入我的页面 点击标题window.open跳转到长图页面&#xff0c;客户的需求是在app里新开一个窗口展示长图页面&#xff0c;window.open打开&#xff0c;ios端是符合客户需求的&#xff0c;但是在安卓端他会在当前webview打开 这…

消息队列-RabbitMQ:死信队列

十五、死信队列 1、死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到 queue 里了&#xff0c;consumer 从 que…

【Chrono Engine学习总结】4-vehicle-4.3-两个vehicle碰撞测试

由于Chrono的官方教程在一些细节方面解释的并不清楚&#xff0c;自己做了一些尝试&#xff0c;做学习总结。 今天突发奇想&#xff0c;想试一下&#xff0c;是否可以实现两个vehicle的碰撞&#xff1f; 1、两辆vehicle的仿真 官方提供了demo_VEH_TwoCars这个demo&#xff0c…

【更新公告】AirtestIDE更新至1.2.17版本

1. 前言 本次更新为AirtestIDE、Airtest-Selenium库更新。 AirtestIDE更新至1.2.17版本&#xff0c;AirtestIDE内置库Airtest更新为1.3.3.1版本&#xff0c;Poco更新为1.0.94版本&#xff0c;主要支持了selenium4.0以上版本&#xff0c;ADB更换为41版本&#xff0c;Airtest新…

数据驱动决策:掌握高效数据分析的七大步骤

在这个数据驱动的时代&#xff0c;无论是企业决策还是个人发展&#xff0c;数据分析都扮演着至关重要的角色。然而&#xff0c;想要从海量数据中提炼出有价值的信息&#xff0c;并不是一件容易的事情。本文为你详细解读高效数据分析&#xff0c;让你的数据开口说话&#xff0c;…

GIS技术在灾后重建中的空间规划与决策支持

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

单体微服务K8S笔记

单体微服务K8S笔记 https://blog.csdn.net/m0_48341969/article/details/126063832思路参考以上博客 //测试 https://gitee.com/yangbuyi/yi项目组织参考以上git 单体&#xff1a; 不特地介绍 微服务&#xff1a; rpc:远程过程调用 拆分&#xff0c;分别部署&#xff0…

Day04-流程控制语句_循环结构(while,do...while,关键字continue,关键字break,循环嵌套)

文章目录 Day04- 循环结构学习目标1 while循环2 do...while循环4 循环语句的区别5 关键字continue6 关键字break7 循环嵌套案例1&#xff1a;打印5行直角三角形案例2&#xff1a;break结束当层循环 Day04- 循环结构 学习目标 理解for语句的格式和执行流程 随机数公式 理解…

Linux中安装Nginx及日常配置使用

高性能的http服务器/反向代理服务器。官方测试支持5万并发&#xff0c;CPU、内存等消耗较低且运行稳定 使用场景 Http服务器。 Nginx可以单独提供Http服务&#xff0c;做为静态网页的服务器。虚拟主机。 可以在一台服务器虚拟出多个网站。反向代理与负载均衡。 Nginx做反向代理…

SQL注入之DNSLog外带注入

一、认识&#xff1a; 什么是dnslog呢&#xff1f; DNS就是域名解析服务&#xff0c;把一个域名转换成对应的IP地址&#xff0c;转换完成之后&#xff0c;DNS服务器就会有一个日志记录本次转换的时间、域名、域名对应的ip、请求方的一些信息&#xff0c;这个日志就叫DNSLog。…

基于 java springboot+layui仓库管理系统

基于 java springbootlayui仓库管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…

好书推荐| After Effects 2022案例实战全视频教程

After Effects 2022案例实战全视频教程 作者 &#xff1a;王红卫 书号&#xff1a;9787302631958 定价&#xff1a;99元 出版时间&#xff1a;2023年7月 作者介绍 王红卫 拥有多年设计师的经学经验&#xff0c;北京理工大学百事特教师&#xff0c;水木风云工作室创始人&a…

网络编程知识整理

目录 1.1 引言 1.2 分层 1.3 TCP/IP的分层 1.4 互联网的地址 1.5 域名服务 1.6 封装 1.7 分用 1.8 端口号 1.1 引言 很多不同的厂家生产各种型号的计算机&#xff0c;它们运行完全不同的操作系统&#xff0c;但 T C P / I P协议族允许它们互相进行通信。这一点很让人感…

⭐北邮复试刷题105. 从前序与中序遍历序列构造二叉树__递归分治 (力扣每日一题)

105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,…

论文精读--word2vec

word2vec从大量文本语料中以无监督方式学习语义知识&#xff0c;是用来生成词向量的工具 把文本分散嵌入到另一个离散空间&#xff0c;称作分布式表示&#xff0c;又称为词嵌入&#xff08;word embedding&#xff09;或词向量 Abstract We propose two novel model architec…