1.快速排序注意事项:快速排序的二三步不能反过来。
一,指针操作一维字符型数组:
const char *s=“字符串” -- -- -- 获取字符串常量区的地址
const用了之后,就变为只读性,不能修改地址中的变量,eg:puts(char *s)
3.字符串拼接可能发生越界的情况,解决办法就是给够足够的拼接空间,避免导致空间重叠的情况
char *strncpy(char *dest,const char *src,size_t n );
----- n < strlen(src) 就是只拷贝前n个字符,最终dest中不会有‘\0’
----- n== strlen(src) 正常拷贝
----- n>strlen(src) 拷贝够次数后,剩余拷贝全部补‘\0’
char *strncat (char *dest,char *src,size_t n);
拼接的基础上多n个控制条件
----- n
int Strncmp(const char *s1, const char *s2, size_t n)
二,指针操作一维字符型数组(字符串)
注意:能加const就加const
gets puts
void Gets(char *s) //输入字符串
{
do
{
*s = getchar();
}while(*s++!='\n');
s--;
*s='\0';
}
void Puts(const char *p) //输出字符串
{
while(*p!='\0')
{
putchar(*p);
++p;
}
putchar('\n');
}
strlen
size_t Stlen(const char *s) //stlen作用的模拟
{
int cut = 0;
while(*s!='\0')
{
cut++;
s++;
}
return cut;
}
strpy/strncpy
char *Strcpy(char *dest,const char *src) //赋值
{
char *ret = dest;
while(*dest = *src)
{
dest++;
src++;
}
return ret;
}
char *Strncpy(char *dest, char *src,size_t n)
{
char *ret = dest;
while( n && (*dest = *scr) )
{
++dest;
src++;
--n;
}
while(n)
{
*dest = 0;
++dest;
--n;
}
return ret;
}
strcat/strncat
char *Strcat(char *dest,const char *src) //字符串的拼接
{
char *ret = dest ;
while(*dest != '\0' )
{
dest++;
}
while((*dest = *src) != '\0')
{
dest++;
src++;
}
return ret;
}
char *Strncat(char *dest,const char *src,int n)
{
char *ret = dest;
while(*dest != '\0')
dest++;
while(n && *src != '\0')
{
*dest = *src;
dest++;
src++;
--n;
}
*dest = '\0';
return ret;
}
strcmp/strncmp
char Strcmp(const char *s1,const char *s2) //比大小
{
while(*s1==*s2 && *s1=='\0' && *s2!='\0')
{
++s1;
++s2;
}
return *s1 - *s2;
}
int Strncmp(const char *s1,const char *s2,size_t n)
{
n--;
while( n &&*s1==*s2 && *s1=='\0' && *s2!='\0')
{
++s1;
++s2;
--n;
}
return *s1-*s2;
}
三,指针+函数
1.形式:
eg; int add(int a.int b) { }
add 就是这块空间的地址--首地址,也就是函数名--入口地址
用法:int (*p) (int a,int b)
回调函数:
概念:回调函数是通过函数指针调用的函数,叫回调函数
技术上:通过函数指针实现
函数指针(指向基类型-为函数类型) 函数类型的指针
接口:void qsort(void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *));
void *:万能指针,可以接受任何类型的指针
@nmemb: 排序的元素个数
@size: 单个元素的大小
@compar: 比较函数
回调函数:int compar(const void *a, const void *b)
----compar 两个参数 其实表示 数组中某两个元素的地址
----compar 返回值 表示的就是数组中两个元素的大小关系
总结:1.函数名就是函数的入口地址
2.定义一个函数指针变量获得函数名
3.通过指针调用的方式,进行函数的调用
4.用途:回调函数
四,指针+二维数组
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}
形式:int (*p)[4] = a
*(*(p+i)+j) === a[ i ] [ j ]
p+1 //偏移到了 下一个 int[4]
//类型为int(*)[4]
*(p+1) //偏移到下一个int
//*(p+1) 代表的类型int[4] 此时相当于是 int[4]的数组名
//*(*(p+1) + 1)