gpt4 book ai didi

C++ for 循环/字符指针 "hack"

转载 作者:行者123 更新时间:2023-11-30 00:38:29 24 4
gpt4 key购买 nike

我有一小段代码做了一些有趣的事情,但我不知道它是如何做到的。

int main(int argc, const char * argv[])
{
char text[] = "object";
for(char *ptr = &text[0]; *ptr != '\0'; ptr+=2)
{
cout << ptr << endl;
ptr--;
}
return 0;
}

发生的事情是,它每次都从 [1]、[2]、[3] 等开始,一直到字符串的末尾,打印出内容。我无法理解它是如何做到的,因为指针永远不会被取消引用,但正确的字母似乎会被打印出来。我会假设指针值将打印为奇怪的字符而不是字符串的字母,仅此而已,但事实并非如此。

最佳答案

这是未定义的行为。第一次迭代,ptr指向 "object" .很好,打印出来,然后你就可以了ptr-- .所以现在,ptr指向您不再拥有的内存。只要您不取消引用它或对其进行指针运算,就可以了。但是当你在循环中增加它时你会这样做 - ptr+=2 .

为什么会这样:

在第一次迭代中,ptr指向 "object" ,所以它会打印出来。 cout::operator << (const char*)打印一个以 null 结尾的字符串。没有 char需要取消引用。

在第二次迭代中,ptr递减然后递增 2 , 指向 "bject" .等等……

关于C++ for 循环/字符指针 "hack",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10744403/

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