C语言中的数组初始化常见方法

news/2023/5/28 7:09:30

数组初始化

如果没有显式地初始化数组变量,那么就会采用一般规则:如果数组具有动态存储周期,那么数组元素的值就是没有定义的。否则,所有的元素都会被默认地初始化为 0(如果数组元素是指针,则会被初始化为NULL)

编写初始化列表

当在定义数组时,若要显式地初始化数组,必须使用初始化列表:这是用逗号分隔开的初始化器列表,也就是将每个数组元素的初始值放在大括号 {} 内。如下所示:

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

上述定义使得数组 arr 中的元素具有下面的初始值:

arr[0] = 1, arr[1] = 2, arr[2] = 4, arr[3] = 8

当初始化一个数组时,请注意下面的规则:

  1. 不能在定义长度可变数组时,进行初始化操作。
  2. 如果数组具有静态存储周期,那么该数组的初始化器必须是常量表达式。如果数组具有动态存储周期,那么可以在初始化器中使用变量。
  3. 如果提供了初始化列表,那么可以在数组定义中省略数组长度,数组长度由初始化器列表中最后一个数组元素的索引值决定。例如,前面例子中数组a的定义,等同于下面代码:
  4. int arr[ ] = { 1, 2, 4, 8 }; // 有4个元素的数组
  5. 如果一个数组的定义同时包含了对数组长度指定和初始化列表,那么长度是通过方括号内的表达式指定的。任何元素只要在列表中没有对应的初始化器,就会被初始化为 0(对于指针类型,则初始化为 NULL)。如果列表中所包含初始化器比数组元素更多,则多出来的初始化器直接被忽略。
  6. 最后一个初始化值后面如果还有多余的逗号,则忽略此逗号。
    根据这些规则,下面的定义都是等价的:
int arr[4] = { 1, 2 };
int arr[] = { 1, 2, 0, 0 };
int arr[] = { 1, 2, 0, 0, };
int arr[4] = { 1, 2, 0, 0, 5 };

在最后一行代码的数组定义中,初始化器5被忽略了。当这种不匹配的情况发生时,大多数编译器会发出警告。

数组的初始化器必须与数组元素具有相同的类型。如果数组元素类型是联合、结构或者数组类型,那么每个初始化器则又会是另一个初始化列表。例如:

typedef struct {unsigned long id;char name[64];/* ... */
} Student;Student stu[6] = {{ 1000, "XiaoMing"},{ 2000, "XiaoWang"}
};

数组的其他 4 个元素会被初始化为 0,按照本例情况,为{0,“”}。

初始化特定元素

借助于 C99 新增的元素指示符,可以把初始化器关联到特定的元素。当需要把特定的元素与初始化器关联时,将其索引值放在方括号内。换句话说,数组元素的元素修饰符一般格式如下:

ARR[常量表达式]

索引值必须是整数常量表达式,在下面的示例中,元素指示符是 [A_SIZE/2]:

#define A_SIZE 20
int arr[A_SIZE] = { 1, 2, [A_SIZE/2] = 1, 2 };

该数组在定义时把元素 arr[0] 和 arr[10] 初始化为 1,把元素 arr[1] 和 arr[11] 初始化为 2。该数组的所有其他元素都被初始化为 0。在这个例子中,没有元素指示符的初始化器会被关联到前一个初始化元素的下一个元素。

如果在定义数组时没有指定其长度,那么元素指示符的索引值可以是任何的非负整数值。因此,下面的定义会创建一个有 1001 个元素的数组。

int arr[ ] = { [1000] = -1 };

所有的数组元素都具有初始值 0,但最后一个元素例外,它的初始值是 -1。

原文PDF版本传送门

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

mysql 基本组成

1 mysql 基本组成 1.1、mysql连接器的工作流程: 1.2、查看连接状态: show processlist; Note:客户端太长时间没动静 就自动断开 这个时间是由wait_timeout参数控制的,默认8h 长连接短链接 长连接是链接成功后,如果客户端持续有请求,则使用同一个链接[尽量使用长连接,因为每次…

单核工作法18:简化协作(下)

前言 工欲善其事必先利其器。 学习一点儿如何安排时间产出工作量的方法,对于生活也是很有必要的。 目录: 前言目录:议会场合本杰明 富兰克林效应沟通带宽鸡尾酒会问题组织会议接受邀请的条件打电话如实预估一图胜千言问题排队时间临场失误认…

每月碎碎念 | 2019.09

Hi,这里是新开辟的“碎碎念”的世界。这个区域作为记录心情的地方,把每日的所思所想所感所悟记录在这里,当做一个写日记的地方,每个月底汇总成一篇文章,只给我的朋友看。2019-9-1多年前,我在网上读到彼得诺…

如何追妹子学习笔记

文章目录穿着打扮生活与圈子聊天约会如何吸引女生恋爱心理学技巧单身问题,一直困扰了我很久很久,期间也交过几个女朋友,但是都分手了,没有修成正果的,再也没有接触新的女性的朋友了; 每天就 上班&#xff0…

【Java基础】day01-day10

day01 一、switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上? Java5以前,只能是byte,short,int,charJava5开始,加入枚举类型(enum&#xff0…

《单核工作法图解》阅读摘要

文章目录0. 什么是单核工作法?0.1 五项基本概念0.2 单核和全景的节奏0.3 单核工作法的五大原理原理一:已经开始的任务会占据我们的思维,直到它被完成或被抛弃原理二:多任务切换导致低效,而且消耗精力原理三&#xff1a…

产品心理学:识知偏见,我们和自己开的玩笑

​当人们被问愿意选择现在拿走150美元,还是一个月后拿走180美元,人们倾向于选择前者。放弃20%的投资收益是很糟糕的举措——如果我们把时间往后大幅推移,就能很容易看清这一点。 当问题变成“一年后拿走150美元,还是1…

富兰克林的风筝实验中的秘密

Ben Franklin DID fly a Kite in a Storm But Wasnt the First to Prove Lightning is Electric闪电的驯服者:电学的历史富兰克林风筝实验 01 放电风筝一、前言 富兰克林的确在雷电交加的大雨天放飞过风筝, 但命运之神并没有让他遭受天庭之怒&#xff0…

网站优化如何有效的堆砌关键词?

所谓有效,不是打擦边球,更不是利用黑帽子手法,而是确确实实能长期有效的让关键词获得排名,并且不伤害搜索引擎,不伤害用户体验,而且可以说是对搜索引擎和用户的友好表现。那么到底如何有效的在网站“堆砌”…

专用计算机系统的基本构成,计算机系统组成与基本工作原理

计算机系统知识关键词:计算机的组成、基本工作原理、体系结构、存储系统、计算机安全、可靠性与系统性能评测。重点:(1)计算机的组成:计算机的发展以及硬件、软件组成。(2)计算机基本工作原理:数制,汉字编码和CPU结构工…

Virtual Private Network虚拟专用网络-在Linux上搭建专用通道

一、VPN VPN属于远程访问技术,简单地说就是利用公用网络架设专用网络。例如某公司员工出差到外地,他想访问企业内网的服务器资源,这种访问就属于远程访问。 在传统的企业网络配置中,要进行远程访问,传统的方法是租用…

2019年职高专业试卷计算机,2019年重庆市中职毕业生参加高职分类考试招生专业技能考试计算机类考试说明...

2021年高职单招升学一对一咨询高职单招万老师:18623318175(微信)2019年重庆市中职毕业生参加高职分类考试招生专业技能考试计算机类考试说明一、考试性质2019年重庆市高职分类考试招生计算机类专业技能考试是由中等职业学校计算机类相关专业学生参加的普通高等学校招生入学考试…

perl oracle ppm,perl – 为什么没有找到ppm:命令?

我正在尝试运行几个ppm命令,但我没有走得太远.我在azure VM上运行Ubuntu 12.04.1 LTS. > $sudo apt-get install ppmReading package lists... DoneBuilding dependency treeReading state information... Doneppm is already the newest version.0 upgraded, 0 newly insta…

PPM文件格式详解

PPM图像格式是由Jef Poskanzer 在1991年所创造的。 PPM(Portable Pixmap Format)还有两位兄长,大哥名叫「PBM」,二哥人称「PGM」,他们三兄弟各有所长,下面为你们一一介绍: PBM 是位图&#xff0…

华威计算机系统工程,在华威读PPM专业,是一种怎样的体验?

原标题:在华威读PPM专业,是一种怎样的体验?上一篇我们说了曼大的网红专业这一篇我们就来扒一扒另一个网红专业——华威的PPM图:稿定设计PPM——MSc Programme and Project Management方案和项目管理硕士,该课程是为那些…

c语言 ppm 大小,PPM图像处理器

Introduction用C语言代写一个类似Photoshop的图像处理软件,能够对PPM格式对图像文件进行处理。RequirementsThis is a programming assignment, meaning you will write and submit the source code for a program. All programs must compile (and run) on the ugr…

LeetCode 115. 不同的子序列(动态规划)

题目描述 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是) 示例 1: 输入:…

dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(七)Rab...

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/54864567在介绍RabbitMQ之前,先介绍一下AMQP。 1.什么是AMPQ? AMQP,即Advanced Message Queuing Protocol&am…

lintcode练习-118. 不同的子序列

118. 不同的子序列 给出字符串S和字符串T,计算S的不同的子序列中T出现的个数。 子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响。(比如,“ACE”是“ABCDE”的子序列字符串,而“AEC…

Leetcode 115.不同的子序列

不同的子序列 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,&quo…