黑马程序员技术交流社区
标题: 学习笔记5-C语言数组与字符串 [打印本页]
作者: 仰望星空的猪 时间: 2015-11-18 23:33
标题: 学习笔记5-C语言数组与字符串
数组的基本概念及分类
数组:把具有相同类型的若干变量安装有序的形式组织起来。这些按序排列的同类型数据的集合称为数组。
数组元素:构成数组的数据。每个数组元素有相同的名称,不同的下标。
数组下标:是数组元素位置的一个索引。从0开始。
维数:数组元素下标的个数。根据维数可以分为一维数组,二维数组,三维数组和多维数组。
按存储内容分类:数组数组、字符数组、指针数组和结构数组。
一 一维数组
1 一维数组的定义
如果一个数组所有的元素都不是数组,这种数组称为一维数组。
数组的定义方式:
类型说明符 数组名[常量表达式];
类型说明符:基本数据类型或者构造数据类型。
数组名:用户定义的数组标识符。
方括号内:数组元素的个数。
注意
a 数组的长度可以是常量也可以是常量表达式还可以是宏。不可以是变量。
b 数组表示符遵守标识符命名规范。
c 数组名不能与其他变量名同名。
2一维数组的初始化
给每个数组赋予初值。初始化是在编译阶段进行的。
a 定义的同时初始化
类型说明符 数组名[常量表达式]={值列表};
int arr[3]={1,2,3};
类型说明符 数组名[]={值列表};
int arr[]={1,2,3};
元素的个数决定了数组的长度。
b 定义的同时部分初始化
类型说明符 数组名[常量表达式]={部分值列表};
int arr[3]={1,2};
int arr[3]={[1]=12};
将下标为1的元素赋值为12
c 先定义数组后初始化
定义数组: int arr[3];
初始化:a[0]=1;
a[2]=2;
注意
数组未初始化的初值为随机值。
数值型数组部分初始化的数组其他元素初值为0.
字符型数组部分初始化的数组其他元素初值为ascii码的0.
3一维数组的引用
数组名[下标]; 下标从0开始。
4一维数组的存储方式。
a 计算机会给数组分配一段连续的内存空间。
b 数组名代表数组的首地址,从首地址位置依次存入数组的第一个,第二个…第n个元素。数组收地址==数组第一 个元素的首地址==数组名
c每个元素占用空间的大小取决于数组类型。
d元素地址是连续的。
5一维数组长度计算方法
计算数组总长度(字节):sizeof(数组名)数据类型长度:sizeof(数据类型)
数组长度=数组总长度/数组类型;
注意 数组越界问题。
6数组元素作为函数参数
a 每个元素作为函数实参。
b 数组名作为函数的形参和实参。
函数调用时,实参和形参之间是地址传递,将实参数组的首地址传给形参数组
函数定义
返回值类型 函数名(数组类型参数名称[]){
函数体;
}
函数调用
函数名(数组名);
注意
形参数组和实参数组的数据类型必须一致。
形参数组的长度可以不写。
函数体内无法计算形参数组的长度。
二 二维数组
特殊的一维数组,一维数组的每个元素又是一个一维数组。
1 二维数组的定义
类型说明符 数组名[行数][列数]
2 二维数组初始化
1) 完全初始化
int a[2][3]={{1,2,3},{4,5,6}};
int a[2][3]={1,2,3,4,5,6};
2)可以省略第一维长度,跟一维数组省略长度类似
3)部分初始化
int a[2][3]={1,2,3};
int a[2][3]={{1},{2},{3}};
4)先定义后初始化
int a[2][3];
a[0][0]=1;
……
3 二维数组的遍历
双下标形式
数组名[行下表][列下标];
双循环遍历,外层循环遍历行,内循环遍历列
4 二维数组的存储
a计算机分配连续的内存空间
b数组名代表数组首地址。
c每一行存储方式,从行首地址开始,依次存储第一个,第二个…
d每个元素的占用字节数相同,取决于数组类型
e 数组元素之间地址连续。
5 二位数组做参数
类似一维数组。
三 字符串
字符串是位于双引号中的字符序列。
在内存中以”\0”结束,所占字节比实际字节多一个。作为字符串的结束符。
C语言中没有字符串变量。可以用字符数组存放字符串。
1 字符数组的定义
char数组名[数组长度];
char ch[10]=”ABCDEF”;
2 字符数组的初始化
参考数值数组的初始化。
char str[4]={“sdaddsa”};
char str[]=“dadada”;
注意
数组长度>实际长度+1
可以在定义数组并赋值的时候不添加数组长度
char str[]=“dadada”;
3 字符数组的引用
1)类似数值数组用%c打印
2)以%s打印整个字符串数组。输出一条字符串。遇到”\0”结束。
3)以%s接收键盘输入的字符串,遇到字符串空格结束。并且输入的长度小于字符数组的长度。
4 字符数组的长度
sizeof(数组名)
5 字符数组和普通数组的区别
1) scanf和printf时候都 可以用%s进行字符串的输入输出。
2) 字符串数组初始化的时候可以去掉大括号。
char str[10]=”sdadas”;
6 字符串处理函数
使用函数的时候需要包含string.h的头文件
1) 字符串输出函数puts
puts(地址);打印该地址之后的字符串遇到“\0”为止
可以自动换行
2) 字符串输入函数gets
gets(地址);
会有警告,输入长度可能会大于数组长度。
3) 连接字符串strcat
strcat(str1,str2);将字符串str2连接到str1之后。赋值给str1.
4) 字符串拷贝函数strcpy
strcpy(str1,str2);将str2copy到str1中。会覆盖str1之前的值。
5) 字符串比较函数strcmp
strcmp(str1,str2); 比较两个字符串的大小,比较方法是从第一个字符开始逐个比较字符的ascii值遇到不同的为止。
返回值 >0 str1>str2
返回值<0 str1<str2
返回值=0 str1==str2
6) 字符串长度计算strlen
计算字符串的长度 不计算“\0“
strlen(str);
作者: 陈光慧 时间: 2015-11-19 23:48
明天就学到这块了!
作者: chenxinju 时间: 2015-11-19 23:54
刚刚学习了 字符串 感觉还好理解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |