zoukankan      html  css  js  c++  java
  • C语言中指针变量如何向函数中传递

    指针变量存储的是地址,所以在函数调用的时候我们能否将指针变量传递给函数?如果不知道结果,那我们可以直接问电脑,输入如下一段代码。

    void GetMemory(char *p)
    {
       p = (char *)malloc(100);
    }
    void Test(void)
    {
        char *str = NULL; //申明字符串指针str并让它指向空地址
        GetMemory(str);
        strcpy(str, "hello world");
        printf(str);
    }
    

    str为局部变量,当传递给函数时,函数不能真正使用str,用的只是str的一个备份,str的值不变。

    此处str的值仍然为NULL,malloc分配的内存地址并没有赋给str。如何实现呢,执行到这发生访问冲突  

    那么如何解决这个问题呢?

    一共有两个方法

    1、通过return返回地址

    char *GetMemory(char *p)
    {
        p = (char *)malloc(100);
        return p;
    }
    void Test(void)
    {
        char *str = NULL; //申明字符串指针str并让它指向空地址
        str=GetMemory(str);
        strcpy(str, "hello world");
        printf(str);
    }
    

     第二种方法就是通过二级指针

    void GetMemory(char **p)
    {
        *p = (char *)malloc(100);
    }
    void Test(void)
    {
        char *str = NULL; //申明字符串指针str并让它指向空地址
        GetMemory(&str);
        strcpy(str, "hello world");
        printf(str);
    
    
    }
    

      其实这个题目就相当于,我们平时在自己电脑上编辑文档,然后我们用U盘拷贝了一份给同学,我现在显然不可以通过改变同学的文档来改我的文档,但是我们可以让同学改好后,把他改好的文档再发给我,或者,我把我文档上传到一个网盘上,通过网盘,改动我的文档,网盘就相当于一个二级指针。

  • 相关阅读:
    C#中的委托和事件(续)【来自张子扬】
    C# 中的委托和事件[转自张子扬]
    .NET多线程编程入门
    python——configparser模块
    logger模块
    python——time模块
    os模块
    python——re模块
    selenium环境搭建
    iOS中的三大定时器
  • 原文地址:https://www.cnblogs.com/ymonke/p/3184906.html
Copyright © 2011-2022 走看看