一直以为数组初始化应该用memset():
char a[128];
memset(a, 0, sizeof(a));
以为部分初始化仅仅是初始化数组头部元素:
char a[128] = {0};
今有同事纠正,“= {0}”表示全部置0.
经试验,果然可以这样全部置0.
反汇编码中可以看到memset()的调用。
如果没有任何初始化,内容是未初始化的。
只要有部分初始化,数组的剩余部分会自动初始化为0.
规则详见:
http://www.c-faq.com/decl/initval.html
When an automatic array or structure has a partial initializer,
the remainder is initialized to 0, just as for statics.
其中的脚注中又说,K&R2的早期版本中,对部分初始化的说明是错误的。
Early printings of K&R2 incorrectly stated that partially-initialized
automatic aggregates were filled out with garbage.
(金庆的专栏)
分享到:
相关推荐
在C语言程序设计中,一维数组是一种基本的数据结构,...你可以指定所有或部分元素的值,未指定的元素会自动初始化。了解这些基础知识对于编写C语言程序至关重要,特别是在处理数据集或需要一次性设置大量变量的场景中。
部分初始化数组时,未明确赋值的元素默认为0(对于数值类型)。初始化数组的方法包括直接在声明时赋值、使用循环以及使用`memset`函数。在编程实践中,始终初始化变量是良好的编程习惯,可以避免因未初始化导致的...
本实例将深入讲解一维数组和多维数组的初始化与基本操作。数组是内存中的连续区域,通过索引来访问其元素,这对于快速访问和处理大量数据非常有用。 一、一维数组 一维数组可以看作是线性的数据结构,类似于一个...
// 在代码的其他部分初始化 arr[0][0] = 1; arr[0][1] = 2; // ... 以此类推 使用动态内存分配(不是真正的二维数组,但可以实现类似的功能): 如果你需要在运行时确定二维数组的大小,你可以使用动态内存分配。...
在探讨二级C语言编程技术时,一维数组的初始化是一个基础且重要的主题。本文档通过对一维数组初始化的实例分析,来阐述在C语言中如何正确地声明、定义和使用一维数组。 首先,C语言中数组的声明需要指定数组的类型...
3. **混合初始化**:可以在初始化列表中使用空字符或其他特殊字符来跳过某些元素的初始化,其余部分则由系统自动填充默认值。 ```c char str[] = {'I', '', 'a', 'm', '', 'h', 'a', 'p', 'p', 'y', '\0'}; ``` ...
以上介绍了C语言中二维数组的三种常见初始化方法,分别是直接初始化、部分初始化和全0初始化。这些初始化方式可以满足大多数场景的需求。根据具体的应用场景选择合适的初始化方法,可以使程序更加高效和简洁。在实际...
本篇文章将深入探讨C#中数组的初始化与数组元素复制的方法,包括数组的创建、初始化以及如何利用`Array.Copy`方法来高效地复制数组元素。 ### 1. 数组的创建与初始化 在C#中,我们可以通过以下两种方式来创建和...
在C语言中,数组初始化是编程过程中的一个重要环节,它能确保数组在使用前拥有预设的值,避免出现未定义行为。初始化数组的方式多种多样,以下将详细讲解四种常见的初始化方法。 1. 初始化参数列表 这是最直观的...
2. **部分初始化**: ```c int arr[3][3] = { {1, 2}, {3, 4}, {5, 6} }; ``` 在这个例子中,每一行的前两个元素被初始化,而剩下的元素将被自动初始化为0(对于整数数组)。 3. **只初始化部分行**: ```c ...
2. **部分初始化**:只对部分元素进行初始化,未初始化的元素会被自动赋值为类型默认值(如整型为0)。 ```c int arr[2][3] = {{1, 2}, {4, 5}}; ``` 这将创建一个2行3列的数组,第一行的元素是1、2,第二行的元素是...
c语言二维数组初始化本文详细讲解了C语言中二维数组的初始化方法,包括完全初始化、部分初始化和指定行数的初始化。通过掌握这些初始化方法,我们可以更加方便地创建和操作二维数组,从而更有效地利用C语言进行编程...
- 初始化时,如果行数固定而列数不确定,可以只初始化部分行,剩余的行将自动填充0(仅限静态初始化)。 在解压并学习“c语言二维数组初始化.zip”中的内容时,你可能会遇到如何声明、如何初始化、如何访问和操作二...
- **部分初始化**:在静态初始化时,也可以只初始化部分元素,未初始化的元素会被自动设置为0。 - **多维数组**:除了二维数组之外,C语言还支持更高维度的数组,如三维数组等。 - **指针与数组**:在C语言中,数组...
部分初始化允许在声明时只初始化数组的部分元素,未初始化的元素默认为0。 ```c int array[3][4] = {{1, 2}, {5, 6, 7}, {9}}; ``` 在上面的例子中,第一行初始化了前两个元素,第二行初始化了前三个元素,第三...
- 部分初始化:只初始化部分元素,未初始化的元素自动设为0(对于数值类型)。例如: ```c int arr[3][4] = { {1, 2, 3}, {5, 6, 7}, {9, 10} }; ``` - 不指定大小初始化:在初始化时省略行或列的大小,...
本篇文章将深入探讨在LabVIEW 2018中如何初始化数组以及如何进行数组元素的替换。 一、数组初始化 1. **空白数组**:在LabVIEW中,可以通过在程序框图上右键点击并选择“创建”->“数组”来创建一个空白数组。你...
本篇将详细讲解如何在Java中初始化String类型的一维数组和二维数组。 ### 一、一维String数组的初始化 1. **静态初始化**: 在Java中,可以使用花括号{}来静态初始化一维数组。这种方式允许你在声明数组的同时...
2. **部分初始化** 如果数组的大小已知,但只想初始化部分元素,可以只指定部分值,其余元素将自动填充为0(对于整型数组)。例如: ```c int arr[2][3] = {{1, 2}, {4}}; ``` 这将创建一个2x3的数组,第一行有...