用指向数组的指针替换衰减数组导致分段错误

Replacing decayed array with a pointer to array resulting in segmentation fault

我试图使用指针遍历数组:

#include <iostream>
#include <iterator>

int main() 
{
    char name[]{ "Abhi" };

    for (char* ptr_c{ name }; ptr_c != (ptr_c + std::size(name)); ++ptr_c) {
        std::cout << *ptr_c;
    } 

    std::cout << "\n";
}

这导致:Error: Segmentation fault core dumped

然而,在for循环的条件测试中:

 for (char* ptr_c{ name }; ptr_c != (ptr_c + std::size(name)); ++ptr_c)
                                     ^^^^^^  

name 替换 ptr_c 使其工作。为什么? name 不应该衰减到 ptr_c 吗?

ptr_c != ptr_c + std::size(name)

这个条件永远不会为假。如果向指针添加一个非零数,则结果指针永远不会等于原始指针。因此,无限循环溢出数组。

Shouldn't name decay to ptr_c anyway?

没有。 name 总是衰减到指向第一个元素的指针。 ptr_c只是作为第一个元素开始,但是在第一次迭代之后,它指向其他元素。