• 二级指针 (C语言)


    二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C++中可以使用引用类型来实现。

    下面讲解C中的二级指针的使用方法。

    例如我们使用指针来交换两个整型变量的值。

    错误代码如下:

    一级指针

     

    1. #include <stdio.h>  
    2.   
    3. void swap(int *a,int *b)  
    4. {  
    5.         int *tmp=NULL;  
    6.         tmp=a;  
    7.         a=b;  
    8.         b=tmp;  
    9. }  
    10.   
    11. int main(int argc,char **argv)  
    12. {  
    13.         int a=2;  
    14.         int b=3;  
    15.         printf("Before swap a=%d  b=%d ",a,b);  
    16.         swap(&a,&b);  
    17.         printf("After swap a=%d  b=%d ",a,b);  
    18.         return 0;  
    19. }  


    输出的结构如下:

     

    结果分析:不论是数值还是指针,swap函数中的参数传递的是总是值,所以在上述函数中即使a和b的地址已参数传递给swap函数,而在函数内交换的是a和b的值(main函数中a的地址和b的地址),而交换完毕,函数相应的参数从栈中弹出,并不能返回给调用函数,所以该swap函数中的操作是徒劳。可怜

    这里完全可以直接交换a和b的值,不过如果a和b不是一个32位的整型变量,而是一个复杂的数据结构,这样做会降低效率。如下;

     

    1. void swap(TYPE *a,TYPE *b)  
    2. {  
    3.         TYPE tmp;  
    4.         tmp=*a;  
    5.         *a=*b;  
    6.         *b=tmp;  
    7. }  



     

     

    二级指针

    下面是使用二级指针分配内存的例子

     

    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3. #include <string.h>  
    4. void memorylocate(char **ptr)  
    5. {  
    6.         *ptr=(char *)malloc(10*sizeof(char));  
    7. }  
    8. int main(int argc,char **argv)  
    9. {  
    10.         char *buffer;  
    11.         memorylocate(&buffer);  
    12.         strcpy(buffer,"12345");  
    13.         printf("buffer %s ",buffer);  
    14.         return 0;  
    15. }  



    当想改变指针的值的时候不妨考虑使用二维指针。

  • 相关阅读:
    关于EventEmitter的用法
    nodejs中异常错误的处理方式
    nodejs中使用RabbitMq消息中心系统的方式
    webpack中alias别名配置
    webpack中字体配置,可以引入bootstrap
    安装node-sass提示没有vendor目录的解决办法
    Object.assign方法复制或合并对象
    ZeroClipboard跨浏览器复制粘贴
    用extract-text-webpack-plugin提取出来的css文件中背景图片url的不正确的问题
    python抽取指定url页面的title方法
  • 原文地址:https://www.cnblogs.com/cy568searchx/p/3290861.html
Copyright © 2020-2023  润新知