数组部分初始化

数组部分初始化

  • 一维数组

例如int a[10]={0,1,2,3,4};定义a数组有10个元素,但只给前面5个元素赋初值,后5个元素值为0。

  • 二维数组

int a[3][4]={{1},{5},{9}};定义3行4列的数组a,只对各行第1列的元素赋初值,其余元素值为0。int a[3][4]={{1,2},{},{9}};定义3行4列的数组a,可以对某一行不赋值。

  • 字符数组

char c[20]={‘I’,’ ‘,‘a’,‘m’,’ ‘,‘p’,‘r’,‘e’,‘t’,‘t’,‘y’};字符赋给前11个元素,其余元素自动定义为空字符(即’\0’)。

字符串和字符数组
在c语言中,将字符串作为字符数组处理。例如char c[20]={‘I’,’ ‘,‘a’,‘m’,’ ‘,‘p’,‘r’,‘e’,‘t’,‘t’,‘y’};就是用一个一维的字符数组存放一个字符串"I am pretty"中的字符。也可以用字符串常量对字符数组初始化,例如char c[]={“I am pretty”};与char c[]={‘I’,’ ‘,‘a’,‘m’,’ ‘,‘p’,‘r’,‘e’,‘t’,‘t’,‘y’,’\0’};等价,其中花括号可以省略。注意,系统对字符常量自动加一个’\0’作为结束符,用它作一个供辨别的标志,不会产生附加的操作或增加有效字符,例如"I am pretty"共有11个字符,但在内存中占12个字节,而strlen©=strlen(“I am pretty”)=11。

### C语言数组部分初始化及其剩余元素处理 当在C语言中对数组进行部分初始化时,编译器会按照提供的初始值依次赋予数组中的前几个元素。对于未被显式赋初值的那些成员,则依据其存储类别自动设置默认值。 #### 存储类别的影响 - **静态存储期变量**:全局或`static`修饰符限定下的局部数组,在这种情况下即使只提供了少于全部数量的初始项,剩下的位置也会由编译器填充为0[^3]。 - **自动存储期变量**:即函数内部定义的一般局部数组,如果不完全初始化的话,除了已经指定了具体数值的位置外,其他地方将保持不确定的状态(垃圾值),除非特别说明要将其余位设为特定数如通过大括号内的逗号表示法实现全零化。 #### 示例代码展示 下面的例子展示了不同类型的数组如何执行部分初始化: ```c #include <stdio.h> int main() { // 完全初始化 int fullInitArray[5] = {1, 2, 3}; // 自动存储期数组部分初始化,后面元素含有随机值 printf("Automatic storage duration array:\n"); for (size_t i = 0; i < sizeof(fullInitArray)/sizeof(*fullInitArray); ++i){ printf("%d ", fullInitArray[i]); } putchar('\n'); static int staticPartialInit[] = {7}; // 只有一个初始值 // 静态存储期数组部分初始化,后续元素均为0 printf("Static partial initialization with trailing zeros:\n"); for (size_t j = 0; j < sizeof(staticPartialInit)/sizeof(*staticPartialInit); ++j){ printf("%d ", staticPartialInit[j]); } return 0; } ``` 此程序片段分别创建了一个具有自动存储持续时间和另一个拥有静态存储特性的整型数组,并对其进行了不同程度上的初始化操作。前者仅设置了头三个元素的具体值,而后者则仅仅给出了首个元素的确切数字;然而由于它们各自不同的生存周期属性,导致了最终输出结果存在差异——特别是关于那些未经明确定义过的成分上。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值