指针高级和函数高级

一、指针高级

1、指针变量自定义

①#define P_INT int *

        P_INT p, q;

        p:是一个int *指针;     q:是一个int

②typedef int *pInt_t;

        pInt_t p, q;

        p:是一个int *指针;        q:是一个int *指针

2.二级指针

        二级指针就是给地址再取指针,就是被调想要修改主调空间的值,就需要对主调空间类型&,得到指向该类型的指针。

        指针的数组,在函数传参时,数组名对应类型为指向元素这个一级指针的指针。

3.void *

        void:缺省类型,不能定义void类型变量,void *:万能接收指针,接收任何类型的指针。

        memset:内存设置        memcpy:内存拷贝        memcmp:内存比较

4.const关键字

        const关键字在定义变量时一定要初始化;const修饰的只读变量p,仅仅指不能通过变量名修改。

5.指针数组

        指针的数组:是一个数组,元素是指针;int *a[5];定义了一个数组,数组的数组名a,a包含了5个元素,元素的类型是int *;

6.数组指针

        数组的指针:是一个指针,指向整个数组;int (*p)[5];定义了一个指针,指针指向一个数组,数组有5个元素,每个元素都是int;

注意:数组的数组名是指向数组首元素的指针;

二、函数高级

1.指针函数

        指针函数是一个函数,返回值为指针类型的函数;被调函数内部返回的指针一般不能是被调函数的局部变量;

2.函数指针

        函数指针是一个指针,指针指向函数;函数的函数名是指向函数入口的地址;

注意:函数的函数名的大小为1字节,和void*类型大小一样。

3.递归函数

        ①递归需要函数反复的调用(入栈,出栈,传参)

        ②循环不需要的额外开销,有的问题适用递归

4.快速排序:

注:它的思想就是先把数组第一个元素值传给一个自定义变量,然后把第一个元素的指针和最后一个元素的指针传进去,根据比较让指针移动,当pb > key时,就把值交换然后pb不动,就移动pe,依次循环,直到判断条件pb >= pe结束,就把数组排好了。

5.带参宏与不带参宏

        ①不带参宏

        #define PI (3.14)

        ②带参宏

        #define INTCMP(a, b)((a > b)?(a):a:(b))

        ③带参宏和函数的区别:

        带参宏不是函数,不需要入栈、出栈、传参、传递返回值,效率高于函数调用;带参宏是文本展开替换,当调用次数过多时,代码体积较大;

      #define INTCMP(a,b) do{\                                                                                                             
                                        int ret1 = (a > b ? a : b);\
                                        printf("max = %d\n", ret1);\
                                        int ret0 = (a > b ? b : a);\
                                        printf("min = %d\n", ret0);\
                                        }while(0);

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学嵌入式的小白KK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值