一、只读变量
1.const int a;
此时a就是一个只读变量,const int表示基类型为只读。
2.const int * const p = &a;
表示p不能被修改,指向的目标类型不能被修改。
3.int puts(const char *s)
{
}
const在函数里面,表示不能通过*s修改到外面的数据。
4. const可以接收字符数组名,也可以接收字符串常量,提高了参数的适用性。
避免了可能出现的修改操作,将运行时的错误提前到编译时发现。
二、指针函数
指针 + 函数
char * strcpy();
返回值类型是指针类型,指针的函数就叫指针函数。
三、回调函数
通过函数指针调用的函数叫回调函数。
函数指针是一个函数类型的指针,指向的基类型为函数类型。作用就是提供一个接口,回调需要被调用的函数。
void qsort(void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *));
@base 数组起始位置
@nmemb 排序的元素个数
@size 单个元素的大小
@compar 比较函数
比较函数确定进行比较的两个元素的大小规则,需要注意的是,返回值要么是0,要么是大于零的数,要么是小于零的数,返回值是两个元素的差值,然后qsort函数会根据这个差值来对数组进行排序。
int compar(const void *a, const void *b) //回调函数
{
}
compar 两个参数其实表示数组中某两个元素的地址。
四、万能指针void
void * //万能指针 --可以接收任意类型的指针
注意:
如果通过该类型的地址进行数据访问
一定要转换为明确类型
五、指针+二维数组
int a[3][4]; //本质还是一维数组
a是数组名,代表类型就是int[3][4];a[0]的数据类型是int[4]。
可以这样理解:把a[i]当作数组名,[4]就表示这个数组的长度。
六、练习
1
void reverseArrayP(int *begin,int *end)
{
while (begin < end)
{
int t = *begin;
*begin = *end;
*end = t;
++begin;
--end;
}
}
reverseArrayP(a,a+9);
这是一个实现数组逆序的函数。
2.快速排序
void quickSort(int *begin,int *end)
{
int *p = begin;
int *q = end;
int *k = begin;
if (begin > end)
{
return;
}
while (begin < end)
{
while (begin<end && *end <= *k)
{
--end;
}
while (begin<end && *begin >= *k)
{
begin++;
}
swap(begin,end);
}
swap(begin,k);
quickSort(p,end-1);
quickSort(begin+1,q);
}
快速排序用到递归。
3.
int* binaryFindp(int *begin,int *end,int n)
{
int *mid = NULL;
while (begin <= end)
{
mid = begin + (end-begin+1)/2;
if (*mid > n)
{
end = mid - 1;
}else if (*mid < n)
{
begin = mid + 1;
}else
{
break;
}
}
if (begin <= end)
{
return mid;
}else
{
return NULL;
}
}
二分查找。
4.
char * Strncat(char *dest, const char *src,int n)
{
char *ret = dest;
while (*dest != '\0')
dest++;
//
//hello'\0'
while(n && *src != '\0')
{
*dest = *src;
dest++;
src++;
--n;
}
*dest = '\0';
return ret;
}
5.
char *Strncpy(char *dest,const char *src,size_t n)
{
char *ret = dest;
while (n && (*dest = *src) )
{
dest++;
src++;
--n;
}
//printf("n= %ld\n",n);
while(n)
{
*dest = 0;
++dest;
--n;
}
return ret;
}
6. 实现“how are you”变成“you are how”的函数。
void reverserStr(char *begin, char *end)
{
while (begin < end)
{
char t = *begin;
*begin = *end;
*end = t;
++begin;
--end;
}
} //实现字符串翻转的函数
void reverserWord(char *begin,char *end)
{
reverserStr(begin,end); //先整体翻转 uoy era woh
char *p = begin;
char *q = NULL;
while (p <= end)
{
q = p; //记录begin初始位置的值
while (*p != ' '&& *p != '\0')
p++;
reverserStr(q,p-1); //此时q,p-1定位的是一个单词,把它再翻转 ,最外层循环结束就可以变成 you are how
p++;
}
} //嵌套上一个函数,用循环体 将三个单词再分别翻转。