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博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探究网络工具nc(netcat)的使用方法及安装步骤

目录 &#x1f436;1. 什么是nc&#xff08;netcat&#xff09;&#xff1f; &#x1f436;2. nc&#xff08;netcat&#xff09;的基本使用方法 2.1 &#x1f959;使用 nc 进行端口监听 2.2 &#x1f959;使用 nc 进行端口扫描 2.3 &#x1f959;使用 Netcat 进行文件传输…

代码随想录算法训练营day20

题目&#xff1a;530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先 参考链接&#xff1a;代码随想录 530.二叉搜索树的最小绝对差 思路&#xff1a;我一开始想到的方法是先生成中序序列&#xff0c;然后对相邻两项的差进行计算&#xff0c;取…

【PCIE709-F】基于复旦微JFM7VX690T80 FPGA的全国产化8通道光纤双FMC接口数据处理平台

板卡概述 PCIE709-F是一款基于上海复旦微电子的28nm 7系列FPGA JFM7VX690T80的全国产化8通道光纤双FMC接口数据预处理平台&#xff0c;该板卡采用复旦微的高性能7系列FPGA作为实时处理器&#xff0c;实现4路10G SFP光纤以及1路QSFP通信接口、实现1路X8 PCIE数据传输的功能。板载…

【鸿蒙系统学习笔记】网络请求

一、介绍 资料来自官网&#xff1a;文档中心 网络管理模块主要提供以下功能&#xff1a; HTTP数据请求&#xff1a;通过HTTP发起一个数据请求。WebSocket连接&#xff1a;使用WebSocket建立服务器与客户端的双向连接。Socket连接&#xff1a;通过Socket进行数据传输。 日常…

SpringMVC回顾总结笔记

MVC是一种思想而SpringMVC是具体的实现&#xff08;Ioc和DI的关系&#xff09; 在创建项目的时候勾选的SpringWeb框架就是SpringMVC框架 与浏览器建立连接 默认返回的是一个 view 视图。需要添加ResponseBody说明返回的是json数据。RestController是ControllerResponseBody…

【数据结构】_队列

目录 1.概念 2.队列的使用 3.队列模拟实现 4.循环队列 5.双端队列 6.栈与队列的互相实现 6.1 用队列实现栈 6.2 用栈实现队列 1.概念 &#xff08;1&#xff09;队列是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff1b; &am…

小米标准模组+MCU 快速上手开发(一)——之固件下载

小米标准模组+MCU 开发笔记之固件下载 背景技术名词简介● 小米IoT开发者平台● 小米IoT 模组● ESP系列简介问题描述 + 解决方式问题1:固件下载是否有示例,如何下载到硬件板卡中?问题2:固件下载的官方程序是什么?在哪里?该如何使用?问题3:固件下载时,Flash和Ram 有什…

CSB ---> (XXE)XML基础

本来今天想更一下CSbeacon上线多层的内网机器的&#xff0c;但是刚好今天是年后的第一节课&#xff0c;讲的是XXE的基础&#xff0c;那就来先盘一下基础&#xff01;&#xff01; 1.XXE XXE全称是XML External Entity即xml外部实体注入攻击&#xff01;其后果会导致用户…

[bing]“gang调度 Kubernetes的并发控制和一致性机制“论点的对应的源码分析

你是一位K8S专家。请分析在Kubernates&#xff08;https://github.com/kubernetes/kubernetes.git&#xff09;项目和调度coscheduling(https://github.com/kubernetes-sigs/scheduler-plugins/tree/master/pkg/coscheduling) 插件中支撑"PodGroup的管理和调度决策涉及到对…

小程序端学习

P2 创建Uni-app 分离窗口 一样的Ctrl S P3 细节知识点 创建新的小程序页面

一种基于动态水位值的Flink调度优化算法(flink1.5以前),等同于实现flink的Credit-based反压原理

优化flink反压 说明1 flink反压介绍1.1 介绍1.2 大数据系统反压现状1.4 flink task与task之间的反压1.5 netty水位机制作用分析 2 反压优化算法3 重点&#xff01; 但是 可但是 flink1.5以后的反压过程。4 flink反压问题的查找瓶颈办法 说明 首先说明&#xff0c;偶然看了个论…

零基础学习8051单片机(十五)

本次先看书学习&#xff0c;并完成了课后习题&#xff0c;题目出自《单片机原理与接口技术》第五版—李清朝 答: &#xff08;1&#xff09;当 CPU正在处理某件事情的时候&#xff0c;外部发生的某一件事件请求 CPU 迅速去处理&#xff0c;于是&#xff0c;CPU暂时中止当前的工…

Unity之ShaderGraph如何实现水面波浪

前言 这几天通过一个水的波浪数学公式,实现了一个波浪效果,感觉成就感满满,下面给大家分享一下 首先先给大家看一下公式; 把公式转为ShaderGraph 第一行公式:waveType = z*-1*Mathf.Cos(wave.WaveAngle/360*2*Mathf.PI)+x*Mathf.Sin(WaveAngle/360*-2*Mathf.PI) 转换…

pytorch: ground truth similarity matrix

按照真实标签排序pair-wise相似度矩阵的Pytorch代码 本文仅作留档&#xff0c;用于输出可视化 Inputs: Ground-truths Y ∈ R n 1 \mathbf{Y}\in\mathbb R^{n\times 1} Y∈Rn1, Similarity matrix A ∈ R n n \mathbf{A}\in\mathbb R^{n\times n} A∈RnnOutputs: Block dia…

CogFixtureTool(坐标系、校正与定位)

坐标系 任何VisionPro图像都支持一组坐标空间&#xff0c;为表达特定特征的位置提供数字框架。最有用的空间是根空间和用户空间&#xff0c;根空间将点与原始获取图像中的像素相关联&#xff0c;用户空间用于获得校准和固定空间中的特征位置和测量值。 根空间 图像的根空间…

11、内网安全-横向移动NTLM-Relay重放Responder中继攻击LdapEws

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正&#xff01; 目录 前提知识&#xff1a; 一、横向移动-NTLM 中继攻击-Relay 重放-SMB 上线 1、CS权限转给MSF: 2、MSF: 3、添加路由&#xff1a; 4、smb_relay重发模块&#xff1a; 5、受控主机输…

【算法与数据结构】797、LeetCode所有可能的路径

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;有向无环图&#xff08;Directed acyclic graph, DAG&#xff09;是图论中的一个概念&#xff0c;它指…

2 Nacos适配达梦数据库实现方案

1、修改源代码方式 Nacos 原生是不支持达梦数据库的,所以就要想办法让它 “支持”,因为是开源软件,我们可以从源码入手,在流行的 1.x 、2.x 或最新版本代码的基本上进行修改。 主要涉及到以下内容的修改: com/alibaba/nacos/persistence/datasource/ExternalDataS

js谐音梗创意小游戏《望子成龙》

&#x1f33b; 前言 龙年到来&#xff0c;祥瑞满天。愿您如龙般矫健&#xff0c;事业腾飞&#xff1b;如龙鳞闪耀&#xff0c;生活美满。祝您龙年大吉&#xff0c;万事如意&#xff01; 龙年伊始&#xff0c;我给各位设计了一款原创的小游戏&#xff0c;话不多说&#xff0c;直…

智能测径仪 针对设备自身抖动都做了哪些创新加强设计

关键字:测径仪外壳设计,测径仪内部结构,外壳刚性振动,产线共振现象,镜头纯手工擦拭清洗,测径仪智能防抖算法,测径仪多重防抖技术,测径仪防抖技术,测径仪自身防抖&#xff0c; 在生产过程中&#xff0c;被测物不可避免的会发生抖动&#xff0c;测径仪本身也会产生抖动,只是抖动幅…