嵌入式学习记录14

一:string.h

1.strncpy

char *strncpy(char *dest, const char *src, size_t n)

定义一个 char * 类型的函数;其中dest为复制到这个地址,src为要复制的目标;n为复制src的前n 个;

 n < strlen(src)         只拷贝前n个字符,没有完全复制,没有到达'\0';最终dest中不会有  '\0'  

 n == strlen(src)     正常拷贝 

 n > strlen(src)         如果  n  拷贝够了次数  把src全部拷完,到达‘\0’ ;    剩余拷贝 统统补0;

                                也就是 当   *src == '\0'  时  还有剩余,后面全部补 0 ;

2.strncat

char *strncat(char *dest, const char *src, size_t n)

定义一个 char * 类型的函数;其中dest为拼接到这个后面,src为要在后面拼接的后续字符串;n为拼接  src  的前n 个;

 n < strlen(src)      把src 的前 n 个 续接到dest后面,注意要覆盖dest后面的'\0',从dest的最后一个字符开始,覆盖 '\0',拼接完成后再在最后加'\0';

 n >= strlen(src)   src拼完就结束  当  src=='\0'  时结束拼接;

3.Strncmp   

 int Strncmp(const char *s1, const char *s2, size_t n)

定义一个int 型的函数;其中 s1 和 s2 均被 const 为只读,不能被修改;比较s1与s2 的前n 个字符;

二:指针 + 函数 

1.回调函数: 

通过函数指针调用的函数 叫回调函数  

回调函数时,一般是主函数调其他定义的函数,而其他那些被定义的函数一般都留有接口;

1.2快速排序:

void qsort(void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *));

定义为一个空类型的函数,方便后续定义为其他类型函数;其中

void *   为万能指针   ;可以接收任意类型的指针   

                                      如果通过该类型的地址进行数据访问 一定要转换为 明确类型 

base 为数组起始位置;数组首元素<=>数组名;一般直接写数组名

nmemb 为要排序的元素个数;就是要排序的那些东西 的个数,

size 为单个元素的大小;要排序的那些东西的单个的 大小,一般直接在外面sizeof(单个元素);

如一维数组的话 sizeof(a[0]) ;  二维数组sizeof(a[0]):确定第一排的元素大小,sizeof(a[0][0])确定第一排第一个的元素大小;看你要比较那个,如字符串的话就用a[0],单个数字或字符或字符的话就用a[0][0];而第二行的话,就要取地址sizeof(*(a+1));

compare 为比较函数;这个函数需要自己进行确定,看你要怎么进行比较;字符串一般可以调用string.h;此处compare为指针函数;

1.3 compare

 int compar(const void *a, const void *b)   //回调函数

{

        *(const int *)a - *(const int *)b     ;

}

比较不可修改的两个值; compar 两个参数 是 数组中某两个元素的地址 

 compar 返回值 表示的就是数组中两个元素的大小关系 

1.4函数指针 与 指针函数

函数指针 -- 函数的指针  --- 函数类型的 指针 (直接指向别的函数:int (*函数名));

指针函数 -- 指针的函数  --- 返回值为指针类型 的函数 (int * 函数名)

三:指针 + 二维数组 :

int a[3][4];        //    本质还是一维数组  可以写成:

int[4] a[3];   数组名为a 也代表首元素地址a[0],a[0]的类型为 Int [4]型;

&a[0]   对应的   数据类型为int (*)[4];

int (*p)[4] = a;  *p 相当于 是 int[4]这种类型 的 数组

                        *p 就相当于 int[4]这个数组的 数组名

*(*(p+i) + j)<=>a[i][j]   

p==a[0]相当于 a[i]的第一层或第一片(也就是a[0])的地址;这个地址代表了  [ j ] (0到j) 这一片;

(p+i)则是确定在第几层的地址*(p+i)则是走到第几层进入里面  同样也是这一层里面的首地址 ;同样拥有 [ j ] 这一排片;

[ j ]则代表了某一层所有的元素个体;从0到j;



 

你可能感兴趣的:(学习)