用指向数组的指针替换衰减数组导致分段错误
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
只是作为第一个元素开始,但是在第一次迭代之后,它指向其他元素。
我试图使用指针遍历数组:
#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
只是作为第一个元素开始,但是在第一次迭代之后,它指向其他元素。