C語言提高23 二級指標做輸出的記憶體模型

2021-07-08 14:55:53 字數 1703 閱讀 7369

//指標做輸出 被調函式分配記憶體 

//指標做輸入 主調函式分配記憶體

二級指標做輸出模型

#include#include#include#includeint getmem(char** myp1/*out*/, int*mylen1/*in*/, char**myp2/*out*/, int*mylen2/*in*/)

strcpy(tmp1,"abcdefg");

*mylen1 = strlen(tmp1);

*myp1 = tmp1; //間接修改實參p1的值 myp1是個二級指標 通過*來改變它所指向一級指標的值(也就是一級指標的指向)

char*tmp2 = null;

tmp2 = (char*)malloc(100);

if (tmp2 == null)

strcpy(tmp2, "a11112246");

*mylen2 = strlen(tmp2);

*myp2 = tmp2; //間接修改實參p1的值

return 0;

}void getmemfree(char** myp)

free(*myp); //釋放完指標變數所指向的記憶體空間後

*myp = null;//在把指標變數置null

*/ char*tmp = null;

if (myp == null)

tmp = *myp;

free(tmp); //釋放完指標變數所指向的記憶體空間後

*myp = null;//在把實參指標變數置null

//在輸出的時候 通過二級指標可以把實參一級指標置null 能夠很好避免野指標的出現

return;

}void main()

printf("p1: %s\n",p1);

printf("p2: %s\n", p2);

getmemfree(&p1);

getmemfree(&p2);

printf("\nhehhe");

system("pause");

return;

}

如果用一級指標做釋放函式的引數時候:

void getmemfree0(char* myp)

free(myp); //釋放完指標變數所指向的記憶體空間後

myp = null;//這個只能把形參指標置為null 實參指標不能置null 所以實參仍然是個野指標

return;

}

main函式呼叫

void main12()

printf("p1: %s\n", p1);

printf("p2: %s\n", p2);

//實參指標仍然為野指標

getmemfree0(p1); //在被呼叫函式中 把p1所指向的記憶體給釋放掉 但是這樣實參p1並不能在被呼叫函式中置null

getmemfree0(p2);

printf("\nhehhe");

system("pause");

return;

}

但是在函式執行後可以採取這種方法:

if (p1 != null)

if (p2 != null)

C語言二級指標

指標是c語言的靈魂,我想對於一級指標大家應該都很熟悉,也經常用到 比如說對於字串的處理,函式引數的 值,結果傳遞 等,對於二級指標或者多級指標,我想理解起來也是比較容易的,比如二級指標就是指向指標的指標.n級指標就是.但是可能大家比較不容易理解的是,二級指標或者多級指標用在 呢?怎麼使用呢?有沒有必...

二級指標輸出模型

指標的輸入輸出模型是指,在主調函式中分配記憶體 輸入模型 還是被調函式分配記憶體 輸出模型 include include include include 指標做輸出 被呼叫函式分配記憶體 指標做輸入 主調函式分配記憶體 求檔案中兩段話的長度 int getmem char myp1,int myl...

C語言日記 二級指標

指標不僅僅可以指向普通的資料型別,例如 int double char等,也可以指向乙份指標型別的資料,例如 int double char。如果乙個指標指向另外乙個指標我們就稱他為二級指標 指向指標的指標 假設有乙個 int 型別的變數 a,p1是指向 a 的指標變數,p2 又是指向 p1 的指標...