2015-03-31 101 views
0

下面的代碼是否可以工作? -按值傳遞char *

void doSomething(char* in) 
{ 
    strcpy(in,"mytext"); 
} 

這裏的功能是如何被稱爲:

doSomething(testIn); 
OtherFn(testIn); 

char* in在代碼中的其他地方使用,我們正按值傳遞它的功能doSomething。我明白當我們通過價值傳遞時,存儲在char*中的字符串副本將被複制到函數中。所以,當我們做一個strcpy時,它會複製到本地副本還是作爲參數傳入的char* in

我的理解是我們需要做的:doSomething(char* &in)。是對的嗎?

+0

TESTIN是一個char *嗎? – 2015-03-31 04:37:49

+0

@YasirMajeed:是 – techieChamp 2015-03-31 04:41:26

+1

順便說一句:不,「存儲在char *中的字符串的副本不在函數內複製。」只有指針值被複制,而不是指向_to_的字符串。 – 2015-03-31 04:47:10

回答

3

當要修改什麼樣的指針指向,只使用內容:

doSomething(char* in) 

所以,是的,

void doSomething(char* in) 
{ 
    strcpy(in,"mytext"); 
} 

會工作得很好,只要in點不夠內存容納"mytest"和終止空字符。

有時您想要修改指針指向的位置,例如通過分配新內存。然後,你需要傳遞一個指針的引用。

void doSomething(char*& in) 
{ 
    in = new char[200]; 
    strcpy(in,"mytext"); 
} 

,並用它作爲:

char* s = NULL; 
doSomething(s); 
// Now s points to memory that was allocated in doSomething. 

// Use s 


// make sure to deallocate the memory. 
delete [] s; 
+0

通過指針的值,你的意思是地址?在這裏,我需要修改指針的內容。 – techieChamp 2015-03-31 04:43:10

+0

@techieChamp,這就是我的意思。 – 2015-03-31 04:43:45

+0

@juanchopanza,我在你的評論和你說的話有道理之後閱讀了答案。現在更新了。 – 2015-03-31 05:33:43