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



我试图使用指针在数组中循环:

#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)

此条件从不为假。如果向指针添加非零数字,则生成的指针将永远不会等于原始指针。因此,无限循环溢出数组。

名称不应该衰减为ptr_c吗?

否。CCD_ 7总是衰减到指向第一个元素的指针。ptr_c仅作为第一个元素开始,但在第一次迭代之后,它指向其他元素。

最新更新