2015-03-31 127 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