我有这个自定义字符串复制功能,我注意到*dest
参数在取消引用和修改其内容时发生了变化:
char *copyArray(char *dest, char *src)
{
char *a = dest;
while (*dest++ = *src++)
;
char *b = dest;
if ( (a-b) != 0)
printf("Dest pointer has changed\n");
return dest;
}
如果您考虑以下代码:
int main()
{
char name [] = "Hello, there!";
char *new = copyArray(name, "bye");
printf("New is '%s', name is '%s'\n", new, name);
return 0;
}
我得到以下输出:
Dest pointer has changed
New is 'o, there!', name is 'bye'
为什么会这样?
我的意图是*new
指向相同的位置name[]
指向,但显然随着地址的变化,它指向不同的地方。
我觉得发生的事情是,一旦复制结束,C 将目标字符串的原始内容减去更改的字符数(4 表示“再见”)移动到新地址并将其分配给*dest
.
这是真的发生了吗?有人可以向我解释为什么吗?
这与工作无关,我只是想更好地理解指针的行为。
非常感谢您的回复!