相关疑难解决方法(0)

取消引用一个超过指向数组类型的结束指针

在c ++中是否已经很好地定义了一个指向数组类型的一个过去的指针?

请考虑以下代码:

#include <cassert>
#include <iterator>

int main()
{
    // An array of ints
    int my_array[] = { 1, 2, 3 };

    // Pointer to the array
    using array_ptr_t = int(*)[3];
    array_ptr_t my_array_ptr = &my_array;

    // Pointer one-past-the-end of the array
    array_ptr_t my_past_end = my_array_ptr + 1;

    // Is this valid?
    auto is_this_valid = *my_past_end;

    // Seems to yield one-past-the-end of my_array
    assert(is_this_valid == std::end(my_array));
}
Run Code Online (Sandbox Code Playgroud)

常识是,取消引用一个过去的指针是未定义的行为.但是,对于指向数组类型的指针,这是否适用?

这似乎是合理的,这应该是有效的,因为*my_past_end完全可以利用指针算法来解决,并产生一个指向数组中的第一个元素在那里,这恰好也是一个有效的,过去最末端int*的原始数组my_array.

但是,查看它的另一种方法*my_past_end是生成对不存在的数组的引用,该数组隐式转换为 …

c++ arrays dereference language-lawyer

3
推荐指数
1
解决办法
250
查看次数

标签 统计

arrays ×1

c++ ×1

dereference ×1

language-lawyer ×1