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

C语言数组初始化方法大全(附带实例)

在 C语言中,数组用于存储相同类型的多个元素。数组的初始化是一个重要的概念,它允许我们在声明数组的同时为其赋初值。

这篇文章,我将为大家详细介绍 C语言中初始化数组的多种方法,以及一些需要注意的细节。

数组初始化的基本语法如下:

数据类型 数组名[数组大小] = {初始值列表};

让我们深入探讨几种常见的数组初始化方法。

1. 完全初始化

完全初始化是指在声明数组时为所有元素赋予初值。这种方法最为直观,我们可以清楚地看到数组中每个元素的初始值。例如:

int numbers[5] = {1, 2, 3, 4, 5};
char vowels[5] = {'a', 'e', 'i', 'o', 'u'};

在这个例子中,我们分别初始化了一个整型数组和一个字符数组,并为每个元素都指定了初始值。

2. 部分初始化

C语言允许我们只初始化数组的部分元素。在这种情况下,未被显式初始化的元素会被自动初始化为 0(对于数值类型)或 '\0'(对于字符类型)。例如:

int scores[10] = {95, 88, 76};

在这个例子中,数组 scores 的前三个元素被初始化为 95、88 和 76,而剩余的七个元素会被自动初始化为 0。

3. 省略数组大小

如果在初始化时提供了完整的初始值列表,我们可以省略数组大小,编译器会根据初始值的数量自动确定数组的大小。这种方法特别适用于我们事先不确定数组大小,但知道所有初始值的情况。例如:

int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

在这个例子中,编译器会自动将 days 数组的大小设置为 12,与初始值的数量相匹配。

4. 使用循环初始化

有时候,我们可能需要根据某种规律来初始化数组。在这种情况下,使用循环来初始化数组是一个很好的选择。例如,如果我们想创建一个包含 1 到 100 的整数数组,可以这样做:

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
int numbers[100];
for (int i = 0; i < 100; i++) {numbers[i] = i + 1;
}

这种方法特别适用于大型数组或需要复杂计算的初始值。

5. 字符数组(字符串)的特殊初始化

对于字符数组,C语言提供了一种特殊的初始化方式,即使用字符串字面量。例如:

char greeting[] = "Hello, World!";

这种初始化方式等同于:

char greeting[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};

注意,使用字符串字面量初始化时,编译器会自动在字符串末尾添加空字符 '\0'。

6. 使用指定初始化器(C99 及以后)

从 C99 标准开始,C语言引入了指定初始化器(designated initializer),允许我们为数组的特定元素赋值。这在初始化稀疏数组时特别有用。例如:

int sparse_array[100] = {[0] = 1, [50] = 50, [99] = 100};

在这个例子中,我们只初始化了数组的第 1 个、第 51 个和最后一个元素,其余元素都被初始化为 0。

总结

在初始化数组时,有几个常见的错误需要注意:

  • 初始值数量超过数组大小:如果提供的初始值数量超过了数组的声明大小,编译器会报错。
  • 使用变量作为数组大小:在 C89/C90 标准中,数组的大小必须是常量表达式。从 C99 开始,允许使用变量长度数组,但不能在声明时进行初始化。
  • 忘记为字符数组预留空字符的空间:当使用字符数组存储字符串时,要记得为空字符 '\0' 预留一个位置。

 

相关文章:

  • JAVA 集合进阶 06 - 09 Map 集合的实现类:HashMap、LinkecHashMap
  • JAVA 集合进阶 Map集合的实现类 TreeMap
  • 电子电路:空气也会形成电容吗?
  • 并发工具【上】——线程池及其操作
  • Elasticsearch的插件(Plugin)系统介绍
  • 多态(全)
  • 企业级实战之Iptables防火墙案例分析
  • 11. MySQL事务管理(上)
  • 极客大挑战 2019 EasySQL 1(万能账号密码,SQL注入,HackBar)
  • 3.spring基础入门(三)
  • 打卡day44
  • typescript中的type如何使用
  • 信息学奥赛一本通 1570:【例 2】能量项链 | 1843:【06NOIP提高组】能量项链 | 洛谷 P1063 [NOIP 2006 提高组] 能量项链
  • MySQL 索引:为使用 B+树作为索引数据结构,而非 B树、哈希表或二叉树?
  • React-native实战系列
  • 论文速读《VideoMimic:通过视觉模仿实现人形机器人感知控制》
  • 玩转Docker | 使用Docker部署Qwerty Learner英语单词学习网站
  • 第八部分:第三节 - 事件处理:响应顾客的操作
  • AXPM11584:颠覆传统,发现新可能
  • 省赛中药检测模型调优
  • 给别人做网站别人违法经营/百度公司招聘条件
  • 网站怎样优化文章关键词/青岛疫情最新情况
  • 福建网站开发公司/地推项目平台
  • jsp网站开发环境配置/广告推广网站
  • 网站开发公司市场/疫情最严重的三个省
  • 怎么做同城购物网站/沈阳网站建设