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盤拷貝了一份給同學,我現在顯然不可以通過改變同學的文檔來改我的文檔,但是我們可以讓同學改好后,把他改好的文檔再發給我,或者,我把我文檔上傳到一個網盤上,通過網盤,改動我的文檔,網盤就相當於一個二級指針。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM