C语言数组介绍和用法

这篇具有很好参考价值的文章主要介绍了C语言数组介绍和用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本篇文章将带大家学习C语言中的数组,数组在C语言中是一个比较重要的点,大家需要好好理解并多加使用练习。

一、数组的定义

在 C 语言中,数组是一组同类型的元素的集合。数组中的每个元素都可以通过它的下标访问,并且下标是从0开始的整数值。举个例子,下面是一个包含5个整数的数组:

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

我们也可以定义float和double类型的数组:

float numbers[5] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
double numbers[5] = { 1.0, 2.0, 3.0, 4.0, 5.0 };

二、数组的大小

在 C 语言中,可以使用 sizeof() 运算符来获取一个数组的大小,即数组在内存中占用的字节数。例如,假设有一个整数数组 arr,可以使用以下代码获取该数组的大小:

int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(int);

在上述代码中,sizeof(arr) 返回的是整个数组在内存中的字节数,sizeof(int) 返回一个整数类型占用的字节数。由于 arr 中包含5个整数,因此可以通过除以一个整数元素的字节数来计算数组的大小,结果为5。

数组总大小为数组元素类型大小 * 数组元素总个数

三、数组的访问方法

在 C 语言中,数组的访问通常通过下标来实现,即使用数组名和方括号内的索引来访问数组中的元素。例如,假设有以下整型数组:

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

访问数组中的元素通常使用下标,如下所示:

int first = arr[0];    // 获取数组中的第一个元素
int third = arr[2];    // 获取数组中的第三个元素
arr[4] = 6;            // 修改数组中的第五个元素

需要注意的是,数组的下标从0开始,因此第一个元素的下标是0,最后一个元素的下标是数组大小-1

四、使用for循环遍历数组

在 C 语言中,可以使用 for 循环遍历数组中的元素。通常情况下,可以使用数组大小来控制循环的次数。以下是遍历整型数组的示例代码:

int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(int);   // 获取数组大小

for (int i = 0; i < size; i++) {    // 遍历数组
    printf("%d ", arr[i]);
}

在上面的代码中,首先计算出数组的大小,然后使用 for 循环遍历数组中的每个元素,输出其值。循环变量 i 作为数组的索引,从0开始到 size-1 结束。

需要注意的是,数组下标必须在合法的范围内,否则可能导致未定义的行为,例如访问越界内存。在遍历数组时,要保证数组下标不超过数组大小的范围,否则会导致程序错误。

五、数组地址的访问方法

每一个数组在内存中都会有一块属于自己的内存空间,那么我们如何来知道这块内存空间的地址呢?

在 C 语言中,可以使用数组名来获取数组的首地址,即数组中第一个元素的内存地址。对于一维数组,数组名即为数组的首地址。

例如,假设有以下整型数组:

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

那么我们访问数组地址的方法有两种:
一种是通过数组名来访问
一种是通过对数组第一个元素取地址来访问

printf("%d\n", arr);
printf("%d\n", &arr[0]);

其实这两种访问的方法是有区别的。

使用数组名访问数组地址,可以得到整个数组在内存中的起始地址,即数组第一个元素的地址。

而使用数组第一个元素访问数组地址是指通过指向数组第一个元素的指针来访问数组元素的地址。

因为数组的第一个元素的地址就是数组在内存中的起始地址。所以使用这两种方法访问得到的结果都是相同的。

C语言数组介绍和用法

六、二维数组

在 C 语言中,二维数组是指由多行和多列构成的数组。二维数组可以看作是一种特殊的数组,它可以通过行和列的下标来访问数组中的元素。二维数组的定义可以使用以下语法:

int arr[row][col];

其中 row 和 col 分别指定了二维数组的行数和列数。例如,下面是一个声明了 3 行 4 列的二维整型数组的示例代码:

int arr[3][4];

可以使用类似于一维数组的方式对二维数组进行初始化。例如,以下代码将二维数组初始化为一个单位矩阵:

int identity[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};

访问二维数组的元素可以使用类似于访问一维数组的方式。例如,以下代码将访问二维数组中第二行第三列的元素:

arr[1][2] = 10;

需要注意的是,二维数组的行和列都是从 0 开始编号的。因此,二维数组的行数可以使用 sizeof(arr) / sizeof(arr[0]) 来计算,列数可以使用 sizeof(arr[0]) / sizeof(arr[0][0]) 来计算。

七、二维数组的遍历

int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        printf("%d ", arr[i][j]);
    }
    printf("\n");
}

这个示例代码中,二维数组 arr 被初始化为一个 3 行 4 列的矩阵,使用嵌套的两个 for 循环遍历了数组中的所有元素。对于每个元素,使用 arr[i][j] 的方式来获取它的值,并使用 printf 函数输出结果。

需要注意的是,在使用 for 循环遍历二维数组时,外层循环变量控制行,内层循环变量控制列。在每次循环中,使用 arr[i][j] 表示第 i 行第 j 列的元素。循环变量的初始值和终止条件可以根据数组的大小进行相应的调整。

结果:
C语言数组介绍和用法

总结

本篇文章讲解了数组的基本概念及数组的访问方法,这些知识点大家需要好好理解并加以练习。文章来源地址https://www.toymoban.com/news/detail-429391.html

到了这里,关于C语言数组介绍和用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【初始C语言】分支语句和循环语句和转向语句的用法,文章末尾还有精品小礼物噢。

     夜里醒来,听雨滴 打在窗台雨搭上,更细密的一阵雨 落在窗外小树林里 雨落在更远的地方,落在另一场雨中 绵密的一片雨声 从芭蕉的昏暗 词林升起。一场夜雨紧邻古代 在巴山秋池,无需梦 无需修剪火焰,听雨 是一个人靠近古人的地方 而今晚是另一个夜晚 时间稀落,听

    2024年02月05日
    浏览(45)
  • 我用GPT写了一个关于GPT的文章,大家看看写的如何

    目录 I. 引言 1.1 研究背景和意义 1.2 现有研究综述 II. ChatGPT技术介绍 2.1 ChatGPT技术原理 2.2 ChatGPT技术优势 III. ChatGPT技术在智能客服中的应用和挑战 3.1 ChatGPT技术在智能客服中的应用 3.2 ChatGPT技术在智能客服中面临的挑战 3.3 优化用户体验提升ChatGPT技术在智能客服中的作用 IV

    2024年02月07日
    浏览(56)
  • c语言结构体看这篇文章就够啦(详细介绍结构体)

    前言:         c语言两大重要点,一个是指针,另一个就是结构体啦,这篇文章我将全面的介绍一下结构体,和他的使用,相信大家看完这篇以后定能对结构体有个深入的理解,并且会正确的使用它。  💞 💞     欢迎来到小马学习代码博客!!!  现在已经入冬了吧,小

    2024年02月02日
    浏览(31)
  • 1.前言和介绍

    从零学习算法部署-TensorRT篇 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记 本次主要是对课程的内容和所需环境做一个简要的介绍 课程大纲可看下面的思维导图 本课程以 TensorRT 和 PyTor

    2024年02月13日
    浏览(37)
  • WebGL前言——WebGL相关介绍

    第一讲内容主要介绍WebGL技术和相应的硬件基础部分,在初级课程和中级课程的基础上,将技术和硬件基础进行串联,能够对WebGL从产生到消亡有深刻全面的理解。同时还介绍WebGL大家在初级课程和中级课程中的一些常见错误以及错误调试的办法。 先热身一下吧,看个问题:如

    2023年04月08日
    浏览(33)
  • 【RabbitMQ教程】前言 —— 中间件介绍

                                                                       💧 【 R a b b i t M Q 教程】前言——中间件介绍 color{#FF1493}{【RabbitMQ教程】前言 —— 中间件介绍} 【 R abbi tMQ 教程】前言 —— 中间件介绍 💧           🌷 仰望天空,妳

    2024年02月08日
    浏览(60)
  • C语言数据结构(0)——前言

    欢迎来到博主的新专栏——C语言与数据结构 博主id:代码小豪 在前两个专栏当中,博主已经大致的讲过了C语言中的大部分使用方法。大家都知道,学习英语时,首先掌握的是单词,随后学习语法,如此才能融会贯通的学习英语。如果学英文只会单词,那么阅读虽然不成问题

    2024年01月17日
    浏览(29)
  • Rx.NET in Action 中文介绍 前言及序言

    目标 可选方式 Rx 处理器(Operator) 创建 Observable Creating Observables 直接创建 By explicit logic Create Defer 根据范围创建 By specification Range Repeat Generate Timer Interval Return 使用预设 Predefined primitives Throw Never Empty 从其他类型创建 From other types FromEventPattern FromEvent FromTask FromAsync 变换 Transform

    2024年02月13日
    浏览(40)
  • 【c语言】详解c语言#预处理期过程 | 宏定义前言

    c语言系列专栏: c语言之路重点知识整合   创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡𖥦)!!  主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 代码编译到执

    2024年02月01日
    浏览(37)
  • 云原生是什么?和Docker、K8s是什么关系?又带来了何种影响?希望这篇文章给自己及大家解点疑惑

    现在容器化和云原生十分火爆,但如果要理解为什么这个技术在近几年突然爆火,身为传统的Springboot和Springcloud体系开发者都有很多困惑,怎么就突然这么火爆了呢?诸如我就产生了以下问题: 传统的springboot或springcloud体系和云原生对比起来有何差别? 传统的spring体系和云

    2024年02月07日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包