引數策略
如果函式的引數是乙個指標,不要指望用該指標去動態申請記憶體。如下:
void getmemory(char *p, int原因是編譯器總是為每個引數製作臨時副本。指標引數p, 其副本為_p,使_p=p。如果改變了_p所指的內容,相應的p所指的內容也跟著改變(畢竟指向同樣的地方)。但是在getmemory中動態分配記憶體空間,改變了_p的內容。在呼叫函式中的p還是指向null。再者,因為函式getmemory中動態分配了空間,但是沒釋放,這樣呼叫一次函式,就洩露了一次記憶體。圖示:num)
void test(void
)
如果非得用指標引數申請記憶體,可以用指標的指標作為引數申請記憶體
void getmemory(char **p, int原理是一樣的,比較難理解,圖示表示:num)
void test(void
)
比較好的方法是傳指標的引用
#include #include這裡注意指標的引用 為char* &a,要是不好理解可以這樣:#include
#include
using
namespace
std;
void getmemory(char
*&p, int
num)
void test(void
)int
main()
typedef char*pchar;返回值策略可以用函式返回值來傳遞動態記憶體。這中方法比「指標的指標」簡單多了pchar &a
char *getmemory(int在使用返回值時,千萬別返回指向「棧記憶體」的指標、引用,因為該內存在函式結束時自動消亡了,返回的指標是個野指標了。例如num)
void test(void
)
char *getstring()在函式中不定義陣列,定義指標,示例:void test(void
)
char *getstring()此時的程式是正確的,但是有一點,此時分配的記憶體處於靜態區,是只可以讀取但是不可以修改的。void test(void
)
c 指標引數是如何傳遞記憶體的
引數策略 如果函式的引數是乙個指標,不要指望用該指標去動態申請記憶體。如下 void getmemory char p,int num void test void 原因是編譯器總是為每個引數製作臨時副本。指標引數p,其副本為 p,使 p p。如果改變了 p所指的內容,相應的p所指的內容也跟著改變 ...
c 指標引數是如何傳遞記憶體的
void getmemory char p,int num void test void void getmemory char p,int num void test void 原理是一樣的,比較難理解,圖示表示 比較好的方法是 傳指標的引用 include include include inc...
c 指標引數是如何傳遞記憶體的
引數策略 如果函式的引數是乙個指標,不要指望用該指標去動態申請記憶體。如下 void getmemory char p,int num void test void 原因是編譯器總是為每個引數製作臨時副本。指標引數p,其副本為 p,使 p p。如果改變了 p所指的內容,相應的p所指的內容也跟著改變 ...