gpt4 book ai didi

c++ - C++中的递增指针

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:48 24 4
gpt4 key购买 nike

为什么下面两个代码段不等价?

void print (char* s) {
if (*s == '\0')
return;
print(s+1);
cout << *s;
}

void print (char* s) {
if (*s == '\0')
return;
print(++s);
cout << *s;
}

最佳答案

++ 运算符递增指针值,但随后返回原始值...因此 print(s++) 将打印 s< 的值 在增量之前,因为即使它向 s 添加了一个值 1,使得存储在 s 的值等于 s+1,它仍然返回 s 的原始值作为操作的结果。另一方面,print(s+1) 打印增量后的值,但非常重要的是不会修改 s 的原始值。所以语句s+1结果只是一个新的临时指针值……s的原始值没有被修改。

此外,由于您已经使用 ++ 运算符递增和更改了 s 的值,因此当您调用 cout 时,您现在将值打印到新指针指向的任何地方(如果您不小心并且在 s 指向的新内存位置没有用户可访问的内存,这可能会导致崩溃或段错误) .对于 s+1s 的值保持不变,因此 cout 的结果将指向任何 s本来是指点。


编辑:

正如 Michael 所指出的,这实际上是一个递归函数,因此第二个示例只是简单地使用相同的参数调用 print(),因为如前所述,s++ 的返回值s的原始值。这意味着您最终会在某个时候出现堆栈溢出并崩溃,除非 s 指向的值已经是 NULL 字符。

关于c++ - C++中的递增指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com