据我所知,标准的strcmp函数如下所示:
int strcmp(const char* string1, const char* string2)
{
while(*pString1++ == *pString2++)
{
if(*pString1 == 0) return 0;
}
return *pString1 - pString2;
}我的问题是,这不会增加传递给strcmp的指针吗?在下面的示例中,它似乎会丢弃指针,并导致发生无效的事情。
const char* string1 = "blah";
const char* string2 = "blah";
const char* string3 = "blah";
if(strcmp(string1, string2) {doSomething();}
// Won't this make string1 = "" because it incremented the pointer to the end?
else if (strcmp(string1, string3) {doSomethingElse();}对不起,我只是感到困惑,因为似乎如果我将一个指针传入strcmp,我不应该期望该指针突然包含一个空字符串。看起来strcmp应该接受const char* const。我是不是完全误解了什么?
发布于 2012-05-30 23:29:28
你的误解是:参数是通过值(copy)传递的,但你似乎认为它们是通过引用传递的。
您可以通过将参数声明为strcmp的引用来获得预期的行为,如下所示:
int strcmp(const char*& string1, const char*& string2)发布于 2012-05-30 23:27:59
不是,指针string1和string2是函数的本地指针(通过值传递)。对它们所做的任何更改对调用者都不可见。
发布于 2012-05-30 23:28:12
指针本身是通过值传递的,所以虽然它是指向某个对象的指针,但更改它只会更改局部声明。
为了能够从函数的内部作用域修改指针本身,您需要有一个指向char的指针。
https://stackoverflow.com/questions/10819376
复制相似问题