我试图使用指针在数组中循环:
#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
仅作为第一个元素开始,但在第一次迭代之后,它指向其他元素。