zoukankan      html  css  js  c++  java
  • 间接赋值指针

    间接赋值从0级指针到1级指针

    #define  _CRT_SECURE_NO_WARNINGS 
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    
    
    //return 只能返回一个结果
    //
    int  getFileLen2()
    {
        int a = 100;  
        return a;
    }
    
    
    int  getFileLen(int *p)
    {
        *p = 41;  //  p的值是a的地址 *a的地址间接修改a的值 
        //在被调用函数里面 通过形参 去 间接的修改 实参的值...
    }
    
    //形参的属性
    int  getFileLen3(int b)
    {
        int  i = 0;
        b = 100;//  p的值是a的地址 *a的地址间接修改a的值
    }
    
    
    //1级指针的技术推演
    void main32()
    {
        int a = 10;  //条件1  定义了两个变量(实参 另外一个变量是形参p)
        int *p = NULL;
    
        //修改a的值
        a = 20; //直接修改
    
        p = &a;  //条件2 建立关联
    
        *p = 30; //p的值是a的地址 *就像一把钥匙 通过地址 找到一块内存空间 求间接的修改了a的值
        printf("a: %d 
    ", a);
    
        {
            *p = 40;  //  p的值是a的地址 *a的地址间接修改a的值  //条件3 *p
            printf("a: %d 
    ", a);
        }
    
        getFileLen(&a); //建立关联: 把实参取地址 传递给 形参
        printf("getFileLen后 a: %d 
    ", a);
    
        getFileLen3(a);
        printf("getFileLen3后 a: %d 
    ", a);
    
    
        printf("hello...
    ");
        system("pause");
        return ;
    }

    间接赋值的工程意义:

    //函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,来改变实参,把运算结果传出来

    //指针做函数参数的精粹

    //主函数和被调用函数之间通过内存交换结果。

    #define  _CRT_SECURE_NO_WARNINGS 
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    
    int Getdoc(char **p1, int *mylen1, char **p2, int *mylen2)
    
    {
        int ret = 0;
        char *tem1, *tem2;
        
        //指针之间可以相互赋值
    
        tem1 = (char *)malloc(100); //分配100个字节的空间,返回为指向字符的指针
        strcpy(tem1, "dsjfkfdjk");
        *mylen1 = strlen(tem1);  //1级指针
        *p1 = tem1;//2级指针的间接赋值
    
        tem2 = (char *)malloc(200);
        strcpy(tem2, "abcdefg23545");
        *mylen2 = strlen(tem2);  //1级指针
        *p2 = tem2;//2级指针的间接赋
        return ret;
    }
    
    int main()
    {
        int ret = 0;
        int *p1 = NULL;
        int len1 = 0;
        int *p2 = NULL;
        int len2 = 0;
    
        ret = Getdoc(&p1, &len1, &p2, &len2);
    
        printf("p1:%s 
    ", p1);
        printf("p2:%s 
    ", p2);
    
        if (p1 != NULL)
        {
            free(p1);
            p1 = NULL;
        }
        if (p2 != NULL)
        {
            free(p2);
            p1 = NULL;
        }
        printf("p1:%d 
    ", p1);
        system("pause");
        return ret;
    }

     


    /*

    间接赋值成立的三个条件
    条件1 //定义1个变量(实参) //定义1个变量(形参)
    条件2//建立关联:把实参取地址传给形参
    条件3://*形参去间接地的修改了实参的值。
    */

    //间接赋值的应用场景
    void main37()
    {
        //1 2 3 这3个条件 写在有一个函数
        //12 写在一块   3 单独写在另外一个函数里面  =====>函数调用
        //1         23写在一块 ===>抛砖 ====C++会有,到时候,你别不认识......
        char from[128];
        char to[128] = {0};
        char *p1 = from;
        char *p2 = to;
    
        strcpy(from, "1122233133332fafdsafas");
    
        while (*p1 != '')
        {
            *p2 = *p1;
            p2 ++;
            p1++;
        }
    
        printf("to:%s 
    ", to);
        
        system("pause");
        return ;
    
    }
  • 相关阅读:
    阿里云提示Discuz memcache+ssrf GETSHELL漏洞如何解决
    mysql总是无故退出, InnoDB: mmap(68681728 bytes) failed; errno 12
    ElasticSearch6 报错FORBIDDEN/12/index read-only / allow delete (api)
    Yum安装时提示多库版本保护 Multilib version problems found
    redis:CLUSTER cluster is down 解决方法
    虚拟主机如何绑定网站根目录到子目录中
    iscroll遇到的两个坑
    前端之Sass/Scss实战笔记
    JS与jquery书写插件规范
    css命名推荐
  • 原文地址:https://www.cnblogs.com/yaozhenhua/p/9311191.html
Copyright © 2011-2022 走看看