嵌入式学习的第十三天

一、只读变量

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++;
    }
}  //嵌套上一个函数,用循环体 将三个单词再分别翻转。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值