字符、字符数组、字符串
1.字符串:
一系列内存地址连续的字符的集合
字符串以‘\0’(0)结尾
2.以‘\0’(0)结尾的数组可以看成字符串
3.定义
char arr[5];
char arr[]={'a','b','+'}
char arr[]="hello" 长度为6
char arr[5]="hello";//
4.scanf赋值
char arr[]
scanf("%s",arr);//给定字符数组的首地址,方可接受用户输入
//直到遇到tab 、空格、回车、‘\0’停止接收
puts()输出字符串
//括号内,放入字符数组/字符串的首地址
//末尾自动加\n
5.strlen
测字符串的长度,其中不包括'\0'
与sizeof 的区别:sizeof 测类型的长度,当类型为字符型的时候,要算上'\0';
sizeof 是关键字
而strlen 是函数
注意:想要将字符数组当作字符串输出,需在数组的末尾加上‘\0’或0,否则结果是不可预期的
用字符串对字符数组进行初始化时,数组给定的长度一定要算上'\0',否则结果不可预期
6.strcpy/strncpy
char *strcpy(char *dest, const char *src);
返回值:char * 返回dest的首地址
char *dest :目的字符串的首地址
char *stc: 源字符串首地址
char *strncpy(char *dest, const char *src, size_t n);
返回值:char * 返回dest的首地址
char *dest :目的字符串的首地址
char *stc: 源字符串首地址
size_t n: 要拷贝的前n个字符串
注意:dest字符数组的长度一定要大于等于src数组的长度
dest数组在拷贝之前,最好进行初始化,否则值是不可预期的
strncpy函数在拷贝时,如果没有将src内的‘\0’拷贝到dest中,dest不会再末尾添加‘\0’
7.函数:
为了实现某项功能而自定义的函数
原型
返回类型+函数名+(类型)参数列表(形参)
int main(void)
{
add(a,b) //实参
}
形参:指代实参的变量,但是类型必须和实参保持一致
函数一般需要返回类型,如果不需要,可以加void
如果定义了返回类型,函数体中,一定要有返回值
return 函数结束的标志
return 0 一般表示函数正常退出
return -1 非正常退出
exit(0) 正常退出
exit(-1) 异常退出
8.函数的调用
a.函数调用之前,必须先声明
b.如果函数没有返回值,主函数不能接受返回值
c.函数的传递方式:
值传递
引用传递
d.函数的定义只能有一次,声明无数次
9.函数调用的过程
首先,函数从main开始执行->当遇到调用函数时->为其分配空间(临时)->调用函数->开始执行调用函数的函数体->调用函数结束->销毁临时分配的空间->返回主函数->继续执行->主函数执行完毕->所有临时分配的空间被销毁
10. 原型:char *strcat(char *dest, const char *src);
将src指代的字符串连接到dest末尾,覆盖'\0',最后自动添加'\0',dest字符数组的长度一定要大于等于src数组的长度
char *strncat(char *dest, const char *src, size_t n);
将src指代的字符串前n个连接到dest末尾,覆盖'\0',最后自动添加'\0',dest字符数组的长度一定要大于等于src数组的长度
作业:
1.编写函数,打印出100~999的所有水仙花数
2.实现strcmp函数
3.实现strncmp函数
4.实现strcat函数
5.实现函数upper--将给定字符串转换成大写
6.实现函数atoi “123”-->123
7.用递归实现Fabonacci数列
8.判断字符串s1是否包含ch,如果有,输出第一次和最后一次出现ch的位置
9.判断字符串s1中是否包含s2字符串
10.输入5个字符串,并输出长度最短的那个
PDF及word文档:c语言-数组.rar