回顾:
strcmp/strncmp
int strcmp(const char *s1, const char *s2);
int:返回值,
const char *s1:第一个参数,const代表这个参数是不可修改的(只读的)
const char *s2:第二个参数,………………
参数:可以是字符串的首地址,也可以直接是字符串
功能:比较两个字符串,逐个字符一一比较,当遇到不想等时,比较两个字符的ascii值,如果
第一个参数的字符大于第二个参数的字符,返回值为1,反之,如果小于,则为-1,如果相等,
返回0.
int strncmp(const char *s1, const char *s2, size_t n);
与strcmp不同之处:
size_t n:在32为系统中,指代的就是四个字节的整型
功能:比较字符串1和字符串2的前n个字节,当遇到不相同的字符时,返回值等于字符串1中的字符
减去字符串2中的字符,如果返回值大于,表示的是,字符串1中不相同的字符大于字符串2中的字符
反之,则是2大于1,如果相当,返回值为0.
函数:
值传递:
主函数将参数的值复制一个副本,传递给形参,改变形参(副本),不改变原值
指针:
1.什么是指针
存放变量地址的变量
2.指针相关的运算符
&:取地址符号,普通变量前加&,得到此变量的地址
*:指针变量,将变量的地址看作一个值,存放在指针变量里
3.什么是指针变量
存放其他变量地址的一个变量(本质也是一个变量)
定义:int *p;char *r;
int *p;
4.指针变量的长度
所有指针变量的长度都是4个字节
5.指针变量的初始化/赋值
int a;
(int *)p=&a;//初始化
-----------------
int *r;
r=&a; //赋值
注意:未初始化的指针,称为野指针,野指针非常危险
int *p;
*p=100; --->段错误
int a;
scanf("%d",a);--->段错误
尽量不要定义野指针,可以将其初始化为NULL
int *p=NULL;
6.常见的指针类型
int * 访问的空间长度4个字节
char * 访问的空间长度为1个字节
void * 访问的空间长度为4个字节
7.指针作为参数(swap)
实参:值传递,只不过传递的是一个地址
形参:
8.指针作为返回值
9.指针和地址
指针是一个变量,它的指向是可以改变的,
地址是一个常量,是不可更改的。
int a[]={1,2,3,4,5};
int *p=a;
p=p+1;//一次偏移四个字节
char a[]={'a','b','c'};
char *r=a;
r=r+1; //根据指向的类型,如果是int *那么偏移4个字节,如果是char *,那么偏移一个字节
10.数组作为形参
1.用指针接收
void print(int *a)
2.数组接收
void print(int a[])//给不给数组的长度都可以,但是一定要有中括号,表明传递的是一个数组
作业
1.实现my_strlen int my_strlen(const char *string)
2.实现my_strcpy
3.实现my_strcmp
4.实现my_strcat
最好都用指针封装