指针操作一维字符型数组和及回调函数------努力学习嵌入式的第十四天!今天的内容让人脑瓜子嗡嗡的 着重复习

总结

1.快速排序

注意:

  第二三步并不能反过来  要想降序排列只需要加将比较的符号换一下

2.指针操作一维字符型数组

(const) char *s = "hello";

*s='H';    //错误

char s[]="hello";

s[0] = 'B'

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

{  
   正常拷贝 
   多了 一个n 
   n < strlen(src)  
     只拷贝前n个字符,最终dest中不会有'\0'
   n == strlen(src)
     正常拷贝 
   n > strlen(src)
   if (n) 拷贝够了次数 
   剩余拷贝 统统补0

}
     思路:
   
   // 结束条件 *src == '\0'
   // n次 拷贝完成没有

char *Strcpy(char *dest,const char *src)
{
	char *ret = dest;

	while (*dest = *src)
	{
		dest++;
		src++;
	}

	return ret;
}


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;
}

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

 {
   拼接的基础上 多 n控制条件 
   
   n < strlen(src) 拼n下就结束   n == 0
    
   n >= strlen(src) src拼完就结束  src=='\0'
   
   *dest = '\0' //?
 }

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++;

	//
	//hello'\0' 
	while(n && *src != '\0')
	{
		*dest = *src;
		dest++;
		src++;
		--n;
	}
	*dest = '\0';

	return ret;
}

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

int 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,int n)
{

	//3 
	//2
	//1
	n--;
	while (n&&*s1==*s2 && *s1!='\0' && *s2 != '\0')
	{
		++s1;
		++s2;
	    --n;
	}

	return *s1 - *s2;
}

总结:

1.指针操作一维字符型数组(字符串)

2.函数

grts

puts

strlen

strcpy/strncpy

strcap/strncat

strcmp/strncmp

注意:

1.const 能加的都加

2.函数功能尽可能写的全面

指针+函数

char *strcpy();//返回值类型是指针类型的函数

char *strcap();

指针操作一维字符型数组和及回调函数------努力学习嵌入式的第十四天!今天的内容让人脑瓜子嗡嗡的 着重复习_第1张图片

回调函数

回调函数:通过函数指针调用的函数叫回调函数
技术上:通过函数指针的实现
函数指针(指向基类型-为函数类型)函数类型的指针

接口

void qsort(void *base,size_t nmemb,size_t size, int (*compar) (const void *,const void *));
@base    数组起始位置
@nmemb    排序的元素个数
@size      单个元素的大小
@compar   比较函数       / /确定进行比较的两个元素的大小规则

void * //万能指针------任意类型性的指针

          //void型

注意:如果通过该类型的地址进行数据访问  一定要转转换成明确的基类型。

总结:

1.指针操作函数

2.函数名就是函数入口地址

3.定义一个函数指针便变量获得函数名

4.使用:通过指针变量获得函数名

5.用途:回调

函数指针 -- 函数的指针  --- 返回的类型是函数类型的 指针 
指针函数 -- 指针的函数  --- 返回值为指针类型 的函数 

指针+二维数组

int a[3][4];  //本质还是一维数组

int[3] a[4];  //理解角度

                    //a----数组名---代表类型----代表类型是 int[3][4]

                   //a代表的值是首元素的地址-----a[0]

                   //a[0]的数据类型是int [4]

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

                     //数组类型的指针是数组指针

*p   //三步运算完成后
     *p 相当于 是 int[4]这种类型 //数组
     *p 就相当于 int[4]这个数组的 数组名

*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)

你可能感兴趣的:(数据结构,c语言,算法,开发语言,学习)