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

C语言学习及复习笔记-【9】数组

目录

  • 9. 数组
    • 9.1 数组的定义
    • 9.2 数组与指针的区别
    • 9.3 数组大小计算
    • 9.4 数组的赋值
    • 9.5多维数组寻址方式
    • 9.6 函数数组

9. 数组

9.1 数组的定义

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

9.2 数组与指针的区别

指针:也是一个变量,存储的数据是地址。

数组名:代表的是该数组最开始的一个元素的地址。

区别:指针是一个变量,可以进行数值运算。数组名不是变量,不可以进行数值运算。

char *str="Hello";
char arrgs[]="Hello";

字符数组:

char *p=(char*)&arrgs == char *p=arrgs ;
char *p=(char*)(&(arrgs[0])) == &arrgs == arrgs;

字符串指针:

char *p=(char*)&str != str; str==str[0] =='H'

结论:

​ 字符数组的 首地址可以用 arrgs ,&arrgs,来表示并且它们相等,但是指针&str和str是不同的,当遇到字符串指针时候要注意处理方式。

9.3 数组大小计算

​ 在我们没有明确数组的元素个数时,在程序中想知道数组单元个数可以使用 sizeof(a)/sizeof(a[0]), sizeof(a) 是得到数组 a 的大小,sizeof(a[0]) 是得到数组 a 中单个元素的大小(因此可以不必要是a[0],a[i]都行)。

9.4 数组的赋值

对于数组的初始化需要注意以下几点:

  1. 可以只给部分元素赋值,当 { } 中值的个数少于元素个数时,只给前面部分元素赋值。例如:
int a[10]={12, 19, 22 , 993, 344};

表示只给 a[0]~a[4] 5 个元素赋值,而后面 5 个元素自动初始化为 0

当赋值的元素少于数组总体元素的时候,不同类型剩余的元素自动初始化值说明如下:

  • 对于 short、int、long,就是整数 0
  • 对于 char,就是字符 ‘\0’
  • 对于 float、double,就是小数 0.0

我们可以通过下面的形式将数组的所有元素初始化为 0:

int nums[10] = {0};
char str[10] = {0};
float scores[10] = {0.0};

由于剩余的元素会自动初始化为 0,所以只需要给第 0 个元素赋值为 0 即可。

  1. 只能给元素逐个赋值,不能给数组整体赋值。例如给 10 个元素全部赋值为 1,只能写作:
int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
char a[]="hello!"; // 这样赋值之后在结尾会自动加上'\0'。
char a1[]={'h','e','l','l','o','!'}; // 这样赋值是整整好好的6个空间不会自动加上'\0'
所以比较的话,a 的长度比 a1 的要大。

而不能写作:

int a[10] = 1;

9.5多维数组寻址方式

二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。事实上,编译器是这样处理数组的:

设有数组 int a[m][n],如果要访问 a[i][j ]的值,编译器的寻址方式为。

&a[i][j]=&a[0][0]+i*sizeof(int)*n+j*sizeof(int); // 注意 n 为第二维的维数

因此,可以省略第一维的维数,不能省略其他维的维数。

在定义二维数组的时候对其进行初始化,也可以省略第一维,编译器会根据你的初始化语句自动决定第一维度。

9.6 函数数组

将几个返回类型相同的函数定义到函数数组中,通过函数数组指针来调用

//声明   
static U1 (* const TBL_DIM_OUT[DIM_WELCOME_NUM])(void) = {u1_DimexcontOut,                    /* 室内照明函数                          */u1_DimptrOut,                       /* 点照明函数                      */u1_DimlitOut,                       /* 文字盤照明函数                        */u1_DimfueltempOut                   /* 油表和温度照明函数                     */
};//调用
for(u1_cnt = (U1)0; u1_cnt < (U1)DIM_WELCOME_NUM; u1_cnt++){//依次调用这些函数u1_dimout |= TBL_DIM_OUT[u1_cnt]();}

相关文章:

C语言学习及复习笔记-【9】数组

目录9. 数组9.1 数组的定义9.2 数组与指针的区别9.3 数组大小计算9.4 数组的赋值9.5多维数组寻址方式9.6 函数数组9. 数组 9.1 数组的定义 C 语言支持数组数据结构&#xff0c;它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据&#xff0c;但它往往…...

Kubernetes入门教程 --- 使用kubeadm进行集群安装

Kubernetes入门教程 --- 使用kubeadm和二进制安装1. Introduction1.1 架构图1.2 关键字介绍1.3 简述2. 使用Kubeadm Install2.1 申请三个虚拟环境2.2 准备安装环境2.3 配置yum源2.4 安装Docker2.5 时间同步2.6 安装组件2.7 部署集群2.8 Master安装网络插卡3. 查询状态3.1 查询n…...

华为OD机试真题Python实现【相对开音节】真题+解题思路+代码(20222023)

相对开音节 题目 相对开音节构成的结构为辅音+元音(aeiou)+辅音(r除外) 常见的单词有bike cake 给定一个字符串,以空格为分隔符 反转每个单词的字母 若单词中包含如数字等其他非字母时不进行反转 反转后计算其中含有相对开音节结构的子串个数 (连续子串中部分字符可以重复) …...

海思SD3403/SS928V100开发(5)MIPI_YUV相机vio sample开发----修改思路

1. 前言 sensor输出格式: YUV422 8bit 硬件连接: MIPI_YUV相机(4lane MIPI) -> SS928V100 MIPI0(4lane) 框图: 2. 几个问题 基于SS928 SDK中的 vio sample修改; 但是sample里面都是基于RAW RGB sensor开发的sample, 没有现成的MIPI_YUV sensor的参考,需要自己…...

javaee之node.js与es6

问题1&#xff1a;在IDEA控制台为什么node显示不会出来命令 修改完之后记得重新启动电脑 问题2&#xff1a;response.end()作用 在Web开发中&#xff0c;浏览器端的请求到达服务器进行处理的时候&#xff0c;Response.End的作用就是让request执行到此结束&#xff0c;输出到客户…...

11 nacos源码开篇

nacos核心功能点&#xff1a; 服务注册&#xff1a;Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务&#xff0c;提供自身的元数据&#xff0c;比如ip地址、端口等信息。Nacos Server接收到注册请求后&#xff0c;就会把这些元数据信息存储在一个双层的内存…...

13.Jenkins集成sonarqube

Jenkins集成sonarqube1.jenkins集成sonarqube2.jenkins以maven的方式集成sonarqube scanner报错1报错21.jenkins集成sonarqube 1.在jenkins插件管理中安装sonarqube scanner 2.jenkins要知道sonarqube服务端是谁&#xff0c;需要配置&#xff08;系统管理–系统配置–sonarq…...

JavaWeb13-线程休眠和指定唤醒:LockSupport

目录 1.LockSupport.park()&#xff1a;休眠当前线程 2.LockSupport.unpark(线程对象)&#xff1a;唤醒某一个指定的线程 3.扩展&#xff1a;LockSupport.parkUntil(long)等待最大时间是一个固定时间 4.LockSupport和Interrupt 5.LockSupport VS wait 相同点&#xff1a;…...

【第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性)】

第一章&#xff1a;Spring概述、特点、IOC容器、IOC操作bean管理&#xff08;基于xml方式创建对象&#xff0c;注入属性&#xff09; 1.Spring是什么&#xff1f; ①Spring是一款主流的java EE 轻量级开源框架。 ②广义的Spring&#xff1a;Spring技术栈&#xff0c;Spring不再…...

前端react面试题(边面边更)

展示组件(Presentational component)和容器组件(Container component)之间有何不同 展示组件关心组件看起来是什么。展示专门通过 props 接受数据和回调&#xff0c;并且几乎不会有自身的状态&#xff0c;但当展示组件拥有自身的状态时&#xff0c;通常也只关心 UI 状态而不是…...

产品3C认证在哪里办理

​一、什么是CCC认证 3C认证的全称为“中国强制性产品认证”&#xff0c;英文名称China Compulsory Certification&#xff0c;英文缩写CCC。它是中国政府为保护消费者人身安全和国家安全、加强产品质量管理、依照法律法规实施的一种产品合格评定制度。年12月&#xff0c;国家…...

UA-DETRAC数据集转YOLO格式

一&#xff1a; 数据集下载 原官方数据集 链接&#xff1a;https://pan.baidu.com/s/1P_CeSIpJIYSA1dykmFhgYw 提取码&#xff1a; 7f4g 处理完成数据集&#xff08;每10帧取一张&#xff09; 链接&#xff1a;后续添加 提取码&#xff1a;后续添加 二&#xff1a; 处理标…...

代码随想录---二叉树的总结和二叉树的定义

二叉树的种类&#xff1a; 满二叉树&#xff1a;树的所有节点都是满&#xff0c;即都有左右孩子。 这棵二叉树为满二叉树&#xff0c;也可以说深度为k&#xff0c;有2^k-1个节点的二叉树。 完全二叉树&#xff1a;完全二叉树的定义如下&#xff1a;在完全二叉树中&#xff0c…...

Hive SQL 执行计划

我们在写Hive SQL的时候&#xff0c;难免会在运行的时候有报错&#xff0c;所以知道Hive SQL的执行计划具体是什么&#xff0c;然后假如在之后的运行过程中有报错&#xff0c;可以根据执行计划定位问题&#xff0c;调试自己的SQL开发脚本。 一、含义 Hive SQL的执行计划描述S…...

MySQL InnoDB引擎——三层B+树可以存储多少数据量

先说结论&#xff1a; 3层B树大概可以存&#xff1a; 主键为bigint&#xff1a;约2000w主键为int&#xff1a;约4000w*备注&#xff1a; 在《阿里开发手册》中建议&#xff0c;单表行数超过500万行或者单表容量超过2GB&#xff0c;才推荐进行分库分表&#xff0c;如果预计三年后…...

部署跨云容灾的五大难点

为什么企业需要跨云容灾&#xff1f; 据统计&#xff0c;全球已有70%的企业使用云计算服务。上云帮助企业更高效地管理数据资产&#xff0c;但它并非绝对安全。如停电、漏水等机房事故&#xff1b;地震、火灾等自然性灾害&#xff1b;亦或是人为失误&#xff0c;都有可能造成数…...

Docker Compose

为什么需要使用Docker ComposeDocker Compose 容器编排技术1、现在我们有一个springboot项目&#xff0c;需要依赖Redis、mysql、nginx。如果使用docker原生部署的话&#xff0c;则需要安装Redis、mysql、nginx容器&#xff0c;才可以启动我们springboot项目&#xff0c;这样的…...

【ARM架构】armv8 系统安全概述

ARMv8-A 系统中的安全 一个安全或可信的操作系统保护着系统中敏感的信息&#xff0c;例如&#xff0c;可以保护用户存储的密码&#xff0c;信用卡等认证信息免受攻击。 安全由以下原则定义&#xff1a; 保密性&#xff1a;保护设备上的敏感信息&#xff0c;防止未经授权的访问…...

数学小课堂:数学边界

文章目录 引言I 费马大定理1.1毕达哥拉斯定理的推广1.2 一波三折的定理证明过程1.3 希尔伯特第十问题II 数学的边界2.1 认识论问题2.2 在边界内做事情2.3 总结引言 了解数学本身的局限性,才能更好地使用它的原理和思维方式。 数学的边界,这是一个硬的边界,大家不要试图逾越…...

检测中断到来时,让LED灯状态取反,并且在串口工具上打印一句话

任务&#xff1a;检测中断到来时&#xff0c;让LED灯状态取反&#xff0c;并且在串口工具上打印一句话例如&#xff1a;当按键1按下之后&#xff0c;让LED1状态取反&#xff0c;并打印“LED1 down”当按键2按下之后&#xff0c;让LED2状态取反&#xff0c;并打印“LED2 down”当…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...