C语言学习笔记(六):数组(1)
0,问题的引入
怎么保存一个学生的成绩
float a;
怎么保存一个班(10人)的学生的成绩
float a,b,c,d......;
float a1,a2,a3,........;
这样太麻烦了
-》“数组”
1,数组
什么是数组?
一组具有相同的数量类型的有序集合
“集合” “有序的集合” “相同的数据类型”
一维数组,二维数组,多维数组
2,一维数组
2.1数组的定义格式:
类型说明符 数组名 [整型的表达式或者常量];
类型说明符:
指的是数组的类型吗?不对
是指的数组中元素的类型
任意的合法的c语言的数据类型都可以。
基本类型:int float char ....
构造类型:结构体,共用体。。。。
指针类型:
数组名:数组的名字,要符合c语言标识符的规定
整型表达式:用来指定数组元素的个数,指定该数组中有多少个元素
一般在定义时,是一个常量表达式或者常量(整型)。随着编译器的升级,有很多编译器也支持变量的写法
例子:
int a[10];
定义了一个数组,名字叫做a,里面有10个元素,并且每个元素的类型是int(并不是数组的类型是Int)
flaot b[10];
定义了一个数组,名字叫做b,里面有10个元素,并且每个元素的类型是float(并不是数组的类型是float)
a到底是什么类型呢? 数组类型
a是一个含有10个int型数据元素的数组。
typeof(a) -> int [10] //typeof是求对象的类型 //typeof怎么使用??????????
b到底是什么类型呢? 数组类型
b是一个含有10个float型数据元素的数组。
typeof(b) -> float [10] //typeof是求对象的类型
2.2一维数组在内存中的存放
数组在内存中是在连续的地址空间中存入,并且从低地址到高地址依次存放
int a[10];
依次存入a[0],a[1],a[2]........a[9]
2.3 一维数元素的引用
数组名[下标] -》代表数组中的某个元素
“下标”:整数,c语言中数组的下标是从0开始的: 0,1,2,3,,,,,n-1 (n代表数组元素的个数)
a[0] -> 数组中第一个元素
a[1] -> 数组中第er个元素
......
a[n-1] ->数组中最后一个元素
引用数组元素a[i]时,和引用普通变量一样,有左值,有右值
int a[10];
a[4] = 1000; //把1000存到数组元素a[4]对应的地址中去 :左值
int m;
m = a[4]; //把a[4]对应地址中的值赋值给m :右值
printf("%d\n",a[4]);//把a[4]对应地址中的值取出来并打印 :右值
2.4 一维数组的初始化
初始化:在定义的时候,就给他赋值
数组的初始化用{}
int b[5];//没有初始化,元素的值是不确定的
(1)全部元素都初始化
int a[5] = {1,2,3,4,5};
a[0] -> 1
a[1] -> 2
,....
a[4] -> 5
(2)给部分元素初始化
int b[10] = {1,2};
给前面的元素初始化,后面的元素没有初始化,就默认为0
注意:如果对全部元素都初始化,可以不指定数组元素的个数。
int c[] = {1,2,3,4,5,6,7};
为什么?因为编译器可以猜出来数组元素的个数。
3,字符数组
字符数组本质还是一个数组,也需要遵循数组的一些操作规则
又有一些特殊的地方,所有单独讲讲
char c[5] = {'a','b','c','d','e'};
char c[5] = {'a','b','c','d','e'};//后面的都默认为0,对应的是空字符'\0'
char c[6] = "abcde";//用双引号引起来的是字符串
//相当于把'a'赋值给c[0],字符'b'赋值给c[1]........把空字符赋值给c[5]
字符串后面都会默认有一个空字符,用字符串这种形式给字符数组赋值,也会把空字符进行赋值
strlen -》求字符串或字符数组的长度,元素的个数,不包括'\0'
char c[6] = "abcde"; strlen(c) ->5 sizeof(c) -> 6
char c[10] = {'a','b','c','d','e'}; strlen(c) ->5 sizeof(c) -> 10
char c[5] = "abcde"; strlen(c) ->不确定的值 sizeof(c) -> 5
strlen求字符长度的时候实现原理:先找第一个字符,判断是否为'\0',如果不是长度加一,再判断下个,直到遇到'\0'为止,那么'\0'前面的字符个数就是strlen的结果。