C语言的多级指针你了解吗

编辑: admin 分类: c#语言 发布时间: 2021-12-12 来源:互联网
目录
  • 前言
  • 一、多级指针概念
  • 二、多级指针的使用
    • 1.二维指针
  • 总结

    前言

    自学笔记,没有历史知识铺垫(省略百度部分)C语言了解多级指针的使用

    一、多级指针概念

    指向指针的指针
    即:存放地址的地址
    int **p;

    多级指针可以将内存上毫无关系的多组数据,产生关系(线性操作数据)

    二、多级指针的使用

    1.二维指针

    二维指针示例,此处以系统入口main函数示例1 通过argc提供的数量做循环

    int main(int argc,char **argv)
    {
        for (int i = 0; i < argc; i++)
        {
                printf("argv[%d]=%s \n",i,argv[i]);
        }
        return 0;
    }
    
    $ gcc -o main main.c
    $ ./main staging myname mypassword
    argv[0]=./main 
    argv[1]=staging 
    argv[2]=myname 
    argv[3]=mypassword 
    

    main函数中读取传入的二维指针示例2 仅通过二维指针做判断

    int main(int argc,char **argv)
    {
        int i = 0;
        while (argv[i]!=NULL)
        {
           printf("argv[%d]=%s \n",i,argv[i]);
           i++;
        }
        return 0;
    }
    

    可以使用NULL或者0x0作为多级指针是否读取完毕的标识,效果一致

    $ gcc -o main main.c
    $ ./main staging myname mypassword
    argv[0]=./main 
    argv[1]=staging 
    argv[2]=myname 
    argv[3]=mypassword 
    

    二维指针的创建

    int main()
    {
        char **a;
        char a1 = 1;
        char a2 = 2;
        char a3 = 3;
        a[0] = &a1;
        a[1] = &a2;
        a[2] = &a3;
        //a[0]:1,a[1]:2,a[2]:3
        printf("a[0]:%d,a[1]:%d,a[2]:%d", a[0][0], *a[1], *a[2]);
        return 0;
    }
    
        char *a[5];
        char a1 = 1;
        char a2 = 2;
        char a3 = 3;
        a[0] = &a1;
        a[1] = &a2;
        a[2] = &a3;
        //a[0]:1,a[1]:2,a[2]:3
        printf("a[0]:%d,a[1]:%d,a[2]:%d", a[0][0], *a[1], *a[2]);
        return 0;
    

    以上两种方案效果一致

    注意:

    二维指针与数组的概念非常类似,如上char **a;和char a[]的作用相似二维指针的读取方法a[0][0]或者*a[0]都可以,前者是二维指针下标,a[0]等同于*a

    总结

    本章主要为C语言了解多级指针的使用

    【文章出处:香港cn2服务器