|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)综上所述,再结合我下面这段代码,它在我的编译器里就是不合法的,但是在小甲鱼的编译器中就是合法的:
谢谢小甲鱼带来的视频教程,感谢!!
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢 |
|