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

C语言之旅【6】--一维数组和二维数组

目录

数据类型的分类🎉

数组的分类🍿

一维数组🍔

一维数组格式🌮

一维数组的使用🧀

一维数组的输出🌭

一维数组的输入🎗

一维数组的特点🌮

二维数组🍔

二维数组的格式🧀

二维数组的使用🎉

二维数组逻辑上的存储格式🌭

二维数的本质存储🍿

二维数组要注意的点🌮

数组传参的使用🥨

一维数组的传参🍿

二维数组的传参😜

二维数组传参注意要点❤

彩蛋时刻 !!!


💫只有认知的突破💫才能带来真正的成长💫编程技术的学习💫没有捷径💫一起加油💫

           🍁感谢各位的观看🍁欢迎大家留言🍁咱们一起加油🍁努力成为更好的自己🍁

数据类型的分类🎉

在C语言中,我们的数据类型就这几类。如图所示:

对于内置类型,我们已经很熟悉了。因为在有些场景中,我们描述一些对象的时候,内置类型的描述就无法满足我们的一些需求。所以,C语言就给我们提供了一些自定义类型方便我们更加准确的描述一个对象。对于结构体,联合体和枚举这三种自定义类型,我们已经在之前的博客已经详细的讲过了,大家可以前去观看。C语言之旅【6】--结构体,C语言进阶【8】--联合体和枚举。今天我们的重点是讲解数组

数组的分类🍿

数组的分类一位数组和二维数组(一维,二维最常用),理论上还有3,4,n维数组(不常用)。

一维数组🍔

一维数组是由一块连续的空间组成。它在逻辑和物理空间上都是线性的。如下所示的大概的样子:

一维数组格式🌮

代码格式:

[ 数据类型 ] [数组的名字] [要存储的数据个数]={ . . . . . .};

比如:我要存储10个int型的数据

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

一维数组的使用🧀

一维数组的输出🌭

对于一维数组的使用,我们是通过下标进行访问的。数组的最低位是从0下标开始访问的一直到n-1位。(n为数组的元素个数)。如下图所示:

 代码展示:

#define  _CRT_SECURE_NO_WARNINGS   1
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8 };printf("%d\n", arr[0]);	//通过0下标访问数据1return 0;
}

运行结果:

一维数组的输入🎍

代码要求:

依次输入10个整数。

 如下所示的代码:

#define  _CRT_SECURE_NO_WARNINGS   1
#include <stdio.h>
int main()
{int arr[10] = { 0 };for (int i = 0; i < 10; i++){scanf("%d", &arr[i]);}for (int i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

运行结果:

一维数组的特点🌮

【1】一维数组的下标和每个空间的地址都是递增。如图所示:

 存储的数据类型占有多少个字节,每个空间的地址就会相差多少个字节

 【2】数组名就是数组首元素的地址。如图所示:

所以,我们可以认为,数组名就是一个地址,我们还可以直接拿着数组名这个地址,直接通过解引用去使用。如下代码所示:

#define  _CRT_SECURE_NO_WARNINGS   1
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8 };printf("%d\n", *(arr + 2)); //访问数据3return 0;
}

运行结果:

二维数组🍔

二维数组的格式🧀

0[数据的类型]  数组名 [行数]  [列数]={.........};

二维数组的使用🎉

如下要求:

存储和打印一个3行,3列的数组

 如下代码:

#define  _CRT_SECURE_NO_WARNINGS   1
#include <stdio.h>
int main()
{int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };	//二维数组的存储for (int i = 0; i < 3; i++)		//二维数组的打印{for (int j = 0; j < 3; j++)printf("%d ", arr[i][j]);printf("\n");}return 0;
}

运行结果:

二维数组逻辑上的存储格式🌭

逻辑存储格式如下:

 二维数的输出和输入的形式和一维数组的输入和输出的形式一样的。所以,这里就不再对其赘述了。

二维数的本质存储🍿

其实二维数组的在内存中的存储不是“逻辑上”的样子。其实,它的本质是一连串的格式。如图所示:

二维数组要注意的点🌮

注意:二维数组的行可以省略,列不可以省略

数组传参的使用🥨

一维数组的传参🍿

如下所示的代码:

#define  _CRT_SECURE_NO_WARNINGS   1
#include <stdio.h>void Print(int arr[])
{printf("%d \n", arr[0]);    //拿到arr打印第一个元素
}int main()
{int arr[12] = { 1,2,3,4,5,6,7,8 ,9,10,11,12};Print(arr);        //arr作为参数传过去return 0;
}

运行结果:

二维数组的传参😜

如下所示的代码:

#define  _CRT_SECURE_NO_WARNINGS   1
#include <stdio.h>void Print(int arr[][3])
{printf("%d \n", arr[0][0]);    //打印0行0列的元素
}
int main()
{int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };	//二维数组的存储Print(arr);        //二维数组的传参return 0;
}

运行结果:

二维数组传参注意要点🥗

二维数组作为参数的时候,行可以省略,列不能省略。

彩蛋时刻 !!!

每章一句:“ 站在山顶的人,从不嘲笑山的高度, 因为他们曾亲手丈量过每一步崎岖。”

相关文章:

  • MyBatis(二)
  • AI Agent开发第70课-彻底消除RAG知识库幻觉(4)-解决知识库问答时语料“总重复”问题
  • 生成树的保护机制
  • 解决 Tailwind CSS 代码冗余问题
  • 功能安全管理
  • ES(ES2023/ES14)最新更新内容,及如何减少内耗
  • 《C++与OpenCV实战:图像增强大核心算法详解》​​
  • 设备预测性维护:从技术架构到工程实践,中讯烛龙如何实现停机时间锐减
  • 玄机-第二章日志分析-redis应急响应
  • Eigen与OpenCV矩阵操作全面对比:最大值、最小值、平均值
  • 时序数据库、实时数据库与实时数仓:如何为实时数据场景选择最佳解决方案?
  • 模拟电路中的电感:从“电磁倔驴“到“电路稳定器“的奇幻漂流
  • TYUT-企业级开发教程-第二章
  • MinIO:从入门到精通,解锁云原生存储的奥秘
  • Linux下 使用 SSH 完成 Git 绑定 GitHub
  • 广域网学习
  • Flink 的水印机制
  • AI大模型学习二十六、使用 Dify + awesome-digital-human-live2d + ollama + ChatTTS打造数字人
  • nginx概念及使用
  • Python format()函数高级字符串格式化详解
  • 一个留美学生的思想转向——裘毓麐的《游美闻见录》及其他
  • 幼儿园教师拍打孩子额头,新疆库尔勒教育局:涉事教师已被辞退
  • 大陆非遗项目打铁花、英歌舞将在台演出
  • 英国6月初将公布对华关系的审计报告,外交部:望英方树立正确政策导向
  • 韩正会见美国景顺集团董事会主席瓦格纳
  • 日本一季度实际GDP环比下降0.2%