C语言学习笔记:数组

news2024/12/23 20:18:52

✨博文作者:烟雨孤舟
💖 喜欢的可以 点赞 收藏 关注哦~~

✍️ 作者简介: 一个热爱大数据的学习者

✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教!

目录​​​​​​​

简介

数组声明

数组初始化

访问数组元素

多维数组

二维数组

字符数组

传递数组给函数

从函数返回数组

指向数组的指针


简介

C 语言数组数据结构,是一个可以存储固定大小的相同类型元素的顺序集合。数组中的特定元素可以通过索引访问,第一个索引值为 0。数组遵循先定义后使用。

数组声明

声明一个数组,需要指定元素的类型和元素的数量
//数组类型 数组名 [数组大小]; 数组大小不必填,初始化时等于元素个数综合
一维数组:type arrayName [arraySize];
二维数组:type arrayName [arraySize][arraySize];
数组名表示该数组所分配连续内存空间中的第一个单元的地址,即首地址,由于数组空间分配之后就不允许改变,因此数组名是一个地址常量,不允许修改
例如:
double balance[10];
//balance是一个实型的数组,可以容纳10个类型为double的数字。

数组初始化

类型名 数组名 [数组长度] ={初始值表}
数组逐个初始化:
    int a[3]; a[0]=1;a[1]=2;a[2]=4;
数组整体初始化语句:
    double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
先定义数组再赋值:
    int a[2]; a[0]=1;a[1]=2;
数组元素的值通过键盘输入,元素较多可通过循环输入:
    inta[1];
    scanf("%d",&a[0]);
{ } 之间的数目不能大于在数组声明时[ ] 中指定的元素数目。
如果初始化时省略掉了数组的大小,数组的大小则为初始化时元素的个数。
double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
所有的数组都是以0作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去1。
对于数组的初始化需要注意以下几点:
1.可以只给部分元素赋值,当{}中值的个数少于元素个数时,只给前面部分元素赋值,后面的元素自动初始化, 对于short、int、long,就是整数0,对于char就是字符 '\0';对于 float、double,就是小数 0.0。
2.只能给元素逐个赋值,不能给数组整体赋值
 int a[2]={1,1}是正确的;int a[2]=1是错误的

访问数组元素

数组元素可以通过数组名称加索引进行访问。索引是放在方括号内的。
访问数组元素格式:
    数组名[常量表达式];
    double salary = balance[9];
访问数组时,如果[]里有常量计算表达式是对的,[]允许常量表达式。
定义数组后访问数组只能引用单个的数组元素,不能一次性引用整个数组。
数组下标从0开始,下标不能越界,取值单位[0,数组长度-1]。

实例:
#include <stdio.h>
int main ()
{
   int n[10]; /* n 是一个包含10个整数的数组 */
   /* 通过for循环初始化数组元素 */         
   for (int i = 0; i < 10; i++ ){
      n[i] = i + 100; /* 设置元素 i 为 i + 100 */
   }
   /* 输出数组中每个元素的值 */
   for (int j = 0; j < 10; j++ ){
      printf("Element[%d] = %d\n", j, n[j] );
   }
   return 0;
}

//数组所占存储空间的内存:sizeof(数组名);
//数组的大小:sizeof(数组名)/sizeof(数组下标元素);
#include<stdio.h>
int main(){
    int a[]={1,2,3,4,5};
    int b;
    b=sizeof(a)/sizeof(a[0]);
    printf("数组元素个数为:%d",b);
    return 0; 
}
//在我们没有明确数组的元素个数时,在程序中想知道数组单元个数可以使用 sizeof(a)/sizeof(a[0]), sizeof(a)是得到数组的名称,sizeof(a[0])是得到数组a中单个元素的大小

多维数组

 多维数组最简单的形式是二维数组。

多维数组声明的一般形式:
    类型 数组名[数组大小][数组大小][数组大小]
    type name[size1][size2]...[sizeN];
    int threedim[5][10][4];//三维数组5 10 4整形数组

二维数组

二维数组在逻辑上是方阵,由行和列组成。在物理上是线性的,按行来依次进行存放,内存是连续的。

二维数组在本质上是一个声明一个x行y列的二维整型数组,形式如下:
    类型名 数组名 [行长度][列长度]
    类型 数组名[常量表达式x][常量表达式y];
    type arrayName [ x ][ y ];
    int x[3][4];//3行4列的二维数组
type可以是任意有效的数据类型,arrayName是一个有效的标识符。一个二维数组可以被认为是一个带有 x 行和 y 列的表格。
数组中的每个元素是使用形式为 a[i,j] 的元素名称来标识的,a是数组名称,i和 j是唯一标识a中每个元素的下标。

 

 二维数组的初始化可以按照按行分段赋值和按行连续赋值
按行分段赋值初始化二维数组:
int a[3][4] = {  
 {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
 {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
 {8, 9, 1, 7}   /*  初始化索引号为 2 的行 */
};
按行连续赋值初始化二维数组://所有元素存在的情况下
int a[3][4] = { 0,1, 2, 3,4,5, 6, 7,8, 9, 1, 7} ;
//所有元素存在的情况下,二维数组在初始化时行可以省略不写,列必须要写
int a[][4] = { 0, 1, 2, 3,4,5, 6, 7,8, 9, 1, 7} ;
在定义数组后赋值:
    可以定义整个数组后逐个赋值也可以用通过循环嵌套的形式键盘输入

 访问二维数组元素:
二维数组中的元素是通过使用下标(数组的行索引和列索引)来进行索引
案例:
#include <stdio.h>
int main ()
{
   /* 一个带有 5 行 2 列的数组 */
   int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
   int i= a[0][2];
   printf("%d",i);
   return 0;
}
读取二维数组的所有数据:(for 循环)
int a[3][3]={{1,1,2},{1,1,2},{1,1,2}}
for(int i =0;i<=2;i++){
for(int j=0;j<=2;j++){
printf("%d",a[i][j]);
}
}
初始化二维数组的所有元素:(for 循环)
int a[3][3];
for(int i =0;i<=2;i++){
for(int j=0;j<=2;j++){
scanf("%d",&a[i][j]);
}
}

字符数组

字符数组的定义
一维字符数组: char c[10];
二维字符数组: char a[3][2];
字符数组初始化
一维字符数组: char a[5]={'f','2','e','w','3'};
             char b[]={'d','d'};
二维字符数组: char c[2][2]={{'q','c'},{'a','s'}};
            char d[][2]={{'q','c'},{'a','s'}};
字符数组的引用:
一维字符数组:数组名[常量表达式];a[1+2]//a[1+2]=a[3]
二维字符数组:数组名[常量表达式x][常量表达式y];a[i][j];
字符输出格式:printf(“%c”,字符名);
字符数组输出格式: printf("%s",数组名);

传递数组给函数

 在函数中传递一个数组作为参数,必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针
方式 1:形式参数是一个指针
    void myFunction(int *param){}
方式 2:形式参数是一个已定义大小的数组
    void myFunction(int param[10]){}
方式 3:形式参数是一个未定义大小的数组
    void myFunction(int param[]){}

案例:
#include <stdio.h>
double getAverage(int arr[], int size);/* 函数声明 */
int main (){
   int balance[5] = {1000, 2, 3, 17, 50};/*数组初始化 */
   double avg;
   avg=getAverage(balance,5) ;/*传递一个指向数组的指针作为参数 */
   printf( "平均值是: %f ", avg );  /* 输出返回值 */
   return 0;
}
double getAverage(int arr[], int size){
  double avg,sum=0;
  for (int i = 0; i < size; ++i){
    sum += arr[i];
  }
  avg = sum / size;
  return avg;
}

 二维数组传递给函数
方法1: 第一维的长度可以不指定,但必须指定第二维的长度:
void print_a(int a[][5], int n, int m)
方法2: 指向一个有5个元素一维数组的指针:
void print_b(int (*a)[5], int n, int m)
方法3: 利用数组是顺序存储的特性,通过降维来访问原数组
void print_c(int *a, int n, int m)

从函数返回数组

C 语言不允许返回一个完整的数组作为函数的参数。可以通过指定不带索引的数组名来返回一个指向数组的指针。
想要从函数返回一个一维数组,必须声明一个返回指针的函数.
int * myFunction(){}

指向数组的指针

通过指定不带索引的数组名称来生成一个指向数组中第一个元素的指针。
数组名是一个指向数组中第一个元素的常量指针
double balance[50];
balance是一个指向&balance[0]的指针,即数组balance的第一个元素的地址

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

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

相关文章

基于javaweb jsp+SSM 酒店客房管理系统的设计与实现

一.项目介绍 本系统需要进行登录&#xff0c;点击登录即可跳转到登陆页面&#xff0c; 管理员密码是在数据库中设置好的可以直接登录&#xff0c; 其它用户需要管理员登录以后注册用户才可以根据账号密码登录。 当登录进入到系统当中时 可以对客房&#xff0c;商品&#xff…

使用python制作一个批量查询搜索排名的SEO免费工具

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 搭建背景 最近工作中需要用…

《人月神话》译文修订明细(10)-读者可以对照修改

《人月神话》译文修订明细&#xff08;1&#xff09;-读者可以对照修改 《人月神话》译文修订明细&#xff08;2&#xff09;-读者可以对照修改 《人月神话》译文修订明细&#xff08;3&#xff09;-读者可以对照修改 《人月神话》译文修订明细&#xff08;4&#xff09;-读…

团队管理之性能实施团队日志14 -- 项目终结

历时2个月16天&#xff0c;项目结束了。 今天给客户做最终的汇报。 本来汇报准备了92页PPT&#xff0c;把几个系统单独的都一个个说了个遍。但是感觉这种方式老板不一定能接受。于是换了一个方式&#xff0c;只说overview的结果&#xff0c;但系统的就不一一解释了。 老板更想…

【C/C++套接字编程】TCP通信实验

一、实验目的&#xff1a; 通过本实验使学员了解和掌握编写基于TCP协议的网络应用程序。任务是开发一个基于TCP Socket API的网络聊天程序。 二、实验内容简要描述 用所学的TCP Socket API知识来开发基于TCP协议的网络。通过编程实现服务端和客户端的信息通信。TCP协议建立交…

【MySQL】之索引与索引优化

目录 一、索引介绍二、MySQL索引结构二、索引优化 一、索引介绍 1、索引简介 MySQL官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。 可以得到索引的本质&#xff1a;索引是数据结构。索引的目的在于提高查询效率&…

高考状元、通用语言和轰趴-UMLChina建模知识竞赛第4赛季第4轮

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题&#xff0c;即可获得本轮优胜。第4题为附加题&#xff0c;对错不影响获奖&#xff0c…

Springboot使用pdfbox提取PDF图片

Springboot使用pdfbox提取PDF图片 PDFBox的介绍Springboot集成PDFBox一、提取pdf首页为图像1. 实现需求2. 项目代码3. 执行结果 二、将pdf内容全部转换为图像1. 实现需求2. 项目代码3. 执行结果4.注意事项1.优化项目代码2.提升Java heap size PDFBox的介绍 PDFBox是一个用于创…

FDM3D打印系列——1、愉快的给自己打印一个手办

大家好&#xff0c;我是阿赵。 我日常的个人爱好&#xff0c;除了写博客&#xff0c;还有弹吉他打鼓电子琴&#xff0c;还有3D打印。 3D打印只是我的一个业余&#xff0c;不过由于经常把做好的作品发朋友圈&#xff0c;也带动了身边一些朋友买了和我一样型号的打印机&#xff0…

一种说法:哲学是研究真善美的

一种说法&#xff1a;哲学是研究真、善、美的 今天在工作中谈到了真善美 确定一个企业价值观&#xff1a;求真&#xff0c;求善&#xff0c;求美 我觉得挺好&#xff0c;起码无需解释能懂意思 趣讲大白话&#xff1a;真善美是基本问题 【趣讲信息科技199期】 *****************…

用Python做一个下载器,从获取数据到编写GUI界面

本片文章目录 前言案例基本实现思路?代码实现一、单张小说下载二、整本小说下载三、多线程采集四、采集排行榜所有小说五、搜索小说功能六、GUI界面 尾语 前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 对于广大书虫而言&#xff0c;没有小说看是最痛苦的&#xff0…

English Learning - L3 作业打卡 Lesson6 Day42 2023.6.15 周四

English Learning - L3 作业打卡 Lesson6 Day42 2023.6.15 周四 引言&#x1f349;句1: In towns that are near the sea, the tiny lanterns which had been hung in the streets the night before, are placed into the water when the festival is over.成分划分弱读连读爆破…

(二叉树) 129. 求根节点到叶节点数字之和 ——【Leetcode每日一题】

❓129. 求根节点到叶节点数字之和 难度&#xff1a;中等 给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字&#xff1a; 例如&#xff0c;从根节点到叶节点的路径 1 -> 2 -> 3 表示数…

CSS- 横向和纵向时间轴

/*横向时间轴*/.time-horizontal {list-style-type: none;border-top: 1px solid #707070;max-width: 800px;padding: 0px;margin: 0px;}.text-horizontal {list-style-type: none;max-width: 800px;padding: 0px;margin: 0px;}.text-horizontal li {float: left;position: rel…

数据中心网络的电路交换域

buffer 的意义在用带宽平滑统计突发&#xff1a; 流量波动越大&#xff0c;统计复用能效越高。假设没有 buffer&#xff0c;将大量溢出和空载并存。但如果流量是可预期的&#xff0c;也可以转向相反的方向&#xff0c;比如虚电路。 数据中心与 Internet 不同&#xff0c;流量…

90后Android程序员杨国民的羊粪肥创业故事:从社恐到销售奇迹

90后Android程序员杨国民的羊粪肥创业故事&#xff1a;从社恐到销售奇迹 最近一位90后程序员杨国民的创业故事在社交媒体上引起了轰动。他回到了内蒙古老家&#xff0c;并以羊粪肥为主要产品&#xff0c;取得了惊人的销售成绩。据报道&#xff0c;他的羊粪肥月销量达到了120万…

Java选择题刷题记录2

Java集合的关系 图片来自原文链接&#xff1a;https://blog.csdn.net/weixin_45861283/article/details/116201140 HashMap的键可以为null Java基本数据类型&#xff0c;注意String不是基本数据类型 NIO 全称java non-blocking IO &#xff0c;是指 Java 一系列改进的输入…

一篇文章docker-compose安装使用全解

提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 关于docker composedocker compose安装Linux安装docker-composeWindows安装docker-compose docker-compose YMAL常用配置项综合配置示例 docker compose常用命令启动…

设计模式(二十):行为型之迭代器模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 设计模式…

LabVIEW开发移动车辆的识别和特征提取

LabVIEW开发移动车辆的识别和特征提取 闭路电视摄像机在高速公路上变得越来越普遍&#xff0c;并用于交通管理;摄像机允许操作员直观地监控交通状况。随着摄像机数量的增加&#xff0c;操作员监控每个摄像机成为一项艰巨的任务&#xff0c;因此录制视频&#xff0c;并且通常仅…