使用指针完成一维字符型操作
strlen()
strcpy() strncpy
strcat() strncat
strcmp() strncmp
回调函数callback:qsort(),可以理解为函数的接口,在函数中使用回调函数,可以实现功能的个性化设置。
void qsort(void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *));
@base 数组起始位置
@nmemb 排序的元素个数
@size 单个元素的大小
@compar 比较函数 //确定进行比较的两个元素的大小规则
int a[10] = {1,2,3,4};
int compar(const void *a, const void *b) //回调函数
{
*(const int *)a - *(const int *)b
}
compar 两个参数 其实表示 数组中某两个元素的地址
compar 返回值 表示的就是数组中两个元素的大小关系
void * //万能指针 --可以接收任意类型的指针
//void类型
//
注意:
如果通过该类型的地址进行数据访问
一定要转换为 明确类型
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
void compar(const void *a, const void *b)
{
while((const char *)a ==(const char *)b && (const char *)a != '\0' && (const char *)b != '\0')
{
++a;
++b;
}
return strcmp(a,b);
//return strcmp((const char *)a ,(const char *)b);
}
int main()
{
int i = 0;
char s[][20] = {"hello","world","china"};
qsort(s,3,sizeof(s[0]),compar);
for(i = 0; i <3; ++i)
{
puts(s[i]);
}
}
使用回调函数实现a+b\a-b\a*b等的操作。
指针与二维数组
指针 + 二维数组
int a[3][4]; //本质还是一维数组
int[4] a[3]; //理解角度
//a --数组名 --代表类型 int [3][4]
//a --代表的值 -- 首元素的地址 -- a[0]
//a[0] 的数据类型 int[4]
//&a[0]--对应的数据类型 int(*)[4] //数组类型 (一维整型数组类型)
//数组类型的指针 --- 数组指针
int *
int (*p)[4] = a;*p //三步运算完成后
*p 相当于 是 int[4]这种类型 //数组
*p 就相当于 int[4]这个数组的 数组名int a = 10;
int *p = &a;*p <=> 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)