C语言数组

本文介绍了C语言中的数组,包括数组的定义、初始化方式,如自动计算长度的初始化。同时,讨论了数组名的含义,强调其作为地址常量的特性。此外,文章提到了C99中的动态数组特性,指出其局限性,如只能作为局部变量且长度不可变。最后,指出了数组越界访问的风险及其潜在问题。
摘要由CSDN通过智能技术生成

数组

C中的数组是原始数组,其长度固定,类型相同且在内存中连续存放,其定义和初始化的格式与其它语言大致相同,例如:
int a[5]; 包含5个整形元素的数组,元素初始值未知
int a[5]={1,2,3,4,5}; 创建长度位5的数组并将每个元素初始化。
int a[]={1,2,3,4,5}; 通过初始化自动计算长度
int a[10]={1,2,3}; 创建长度位10的数组,初始化一部分元素,剩余元素默认值为0
当只初始化一部分元素时,其它元素会被设置为默认值,整数的值默认为0,浮点为0.0,字符为’\0’,二维数组也是如此,例如:
int a[3][2] = { {1,1},{2,2},{3,3}}; 标准声明方法
int a[3][2]={1,1,2,2,3,3} 用一维数组初始化,可读性差
int a[][2]= { {1,1},{2,2},{3,3}}; 让编译器自动计算行数
但如果连一个元素都不初始化,那么初始值是未知的,并不是每个编译器都会自动将数组元素设置为0。

对于原始数组来说,数组表示一段固定内存的值,因此数组不允许在初始化时下标使用变量来创建可变长度的数组,也不允许在运行时改变数组长度,因为数组和基本数据类型一样需要在编译时确定大小,动态数组只能在堆中实现。这种最为原始的设计,优点是存取性能高且内存透明,可以通过指针来操作数组元素;缺点是不够灵活且编码效率低,需依赖其它库或手动编码来扩展功能。另外一个缺陷是原始数组在编译和运行时都不会进行越界检查,如果进行越界访问,可能得到一个未知结果&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值