鱼C论坛

 找回密码
 立即注册
查看: 2504|回复: 0

[技术交流] 《带你学C带你飞》第十七~十八讲:数组

[复制链接]
发表于 2017-12-25 23:20:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2018-1-5 20:33 编辑

越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢

一、数组
(1)数组:是用来存放同种类型数据的。

(2)定义数组:类型 数组名[元素个数]

(3)
整形:每个整形占四字节
字符型:每个字符型占一个字节
单精度浮点型:每个浮点型占四个字节
双精度浮点型:每个浮点型占八个字节

(4)在C99之前的版本:数组不能动态定义(通俗的讲就是:不允许在程序运行过程中修改数组空间大小的)。
例子:(如下面这样是不允许的)
int n;
scanf("%d",&n);
int a[n];
(5)访问数组中元素:数组名[下标]        (要注意,下标是从0开始的。)

二、数组的初始化
(1)将数组中的所有元素统一初始化为0:可以这么写:
int a[10]={0};    //将数组中所有元素初始化为0。(后面没有写的会自动填充为0)

(2)赋不同的值,那么用逗号隔开。
int a[10]={0,1,2,3,4,5,6,7,8,9};

(3)只给一部分元素赋值,没有赋值的元素会自动填充为0:
int a[10]={0,1,2,3,4,5};    //表示赋值了前六个数,后四个数自动填充为0。

(4)有时候还可以偷懒,可以只给出各个元素的值,而不指定数组的长度(因为编译器会根据值的个数自动判断数组的长度):
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

(5)C99 增加了一种新特性——指定初始化的元素。这样就可以只对数组中的某些指定元素进行初始化赋值,而未被赋值的元素自动初始化为 0:
int a[10] = {[3] = 3, [5] = 5, [8] = [8]};         // 编译的时候记得加上–std=c99选项

三、关于越界输出和数组的动态定义
(1)越界输出:在C语言中是undefined behaviour(未定义行为),是指C语言标准未做规定的行为。编译器可能不会报错,但是这些行为编译器会自行处理,所以不同的编译器会出现不同的结果,什么都有可能发生,所以有可能是新版编译器的越界保护。
(2)数组的动态定义:C99 标准新增变长数组(VLA,variable length array)的概念,这里的变长指的是数组的长度是在运行时才能决定,但一旦决定在数组的生命周期内就不会再变。
(3)综上所述,再结合我下面这段代码,它在我的编译器里就是不合法的,但是在小甲鱼的编译器中就是合法的:
2.PNG




谢谢小甲鱼带来的视频教程,感谢!!

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 09:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表