迭代器
void printArray(int *begin,int *end)
{
while(begin <= end)
{
printf("%d,",*begin);
++begin;
}
printf("\b \n");
}
快速排序算法
void qSort(int *begin,int *end)
{
if(begin >= end)
{
return;
}
int t = *begin;
int *p = begin;
int *q = end;
while(p < q)
{
while(p < q&&*q >= t)
{
--q;
}
while(p < q&&*p <= t)
{
++p;
}
swap(p,q);
}
swap(begin,p);
qSort(begin,p - 1);
qSort(p + 1,end);
}
字符型指针
字符型指针在C语言中是一种特殊的指针类型,用于存储字符数据的地址。它通常用于处理字符串,因为字符串在C语言中是以字符数组的形式存储的。
字符型指针的声明格式为 char *pointer_name;,其中 pointer_name 是指针变量的名称。
声明和初始化字符型指针
字符型指针可以通过直接初始化来声明,例如:char *str = "hello";这里 str 是一个字符型指针,它指向字符串字面量 "hello" 的首字符。
指针与字符串的关系
字符串字面量在C语言中以空字符 '\0' 结尾,字符型指针指向字符串的起始位置,可以通过指针遍历整个字符串,直到遇到空字符。
指针的算术运算
字符型指针支持算术运算,包括自增(++)和自减(--)操作,以及与其他整数的加减运算。这些运算会影响指针的值,即它所指向的内存地址。指针的使用场景字符型指针广泛用于字符串操作,如复制、连接、比较和搜索。它们也可以用于动态内存管理,通过指针来分配和释放内存空间。
注意事项
指向字符串常量的指针不能修改字符串的内容,因为字符串常量存储在只读的内存段。
在使用指针时,应避免野指针(未初始化或不再有效的指针),以免引起程序崩溃。
指针算术运算时,指针的增量是根据其指向的数据类型决定的,例如 char * 类型的指针每次自增会移动1个字节。
遍历
void Puts(char *s)
{
while(*s)
{
putchar(*s);
++s;
}
putchar('\n');
}
用递归调用求有效字符
int Strlen(char *s)
{
if(*s == 0)
{
return 0;
}
else
{
return Strlen(s + 1) + 1;
}
}
const
关键字有两种形式:
const关键字可以用于修饰局部变量、函数参数、返回值等。在声明时,const修饰的变量必须初始化,否则会导致编译错误。此外,const修饰的变量具有全局性,在使用时需要注意。
const关键字还可以与指针结合使用,形成常量指针(指向常量的指针)或指针常量(指针本身不可变的常量)。常量指针允许指针指向的内容不可变,但指针本身可以改变指向的地址。相反,指针常量的地址不可变,但指针指向的内容可以通过其他途径修改。
void万能指针:不能进行指针运算,主要用于强制类型转换;
动态内存分配
malloc(size):动态分配内存,且一定是连续的;
free(p);释放内存;
realloc(p,size):扩容,缩容;