如何判断指针是否是指向数组的指针?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (54)

考虑一下:

template <class T>
inline constexpr bool found_to_be_array (T* specimen)
{
    if constexpr (std::is_array_v<T>) {
        return true;
    }
    else {
        return false;
    };
}

以及:

int ia[]{ 1,2,3,4,5,6,7,8,9,0 };
int iam[3][3][3][3][3]{};

// returns false
auto is_array_1 = found_to_be_array(ia);

// returns true
auto is_array_2 = found_to_be_array(iam);

我仍在研究这个问题,但对于多维数组而言,它是found_to_be_array有效的。

提问于
用户回答回答于

避免指针衰减的一种方法是使用宏:

template <class T, size_t N> char IS_ARRAY(const T(&)[N]); // declaration only
template <class T>           int  IS_ARRAY(const T(&));    // declaration only
#define IS_ARRAY(x)          (sizeof IS_ARRAY(x) == 1)
#define found_to_be_array    IS_ARRAY                      // OP's name
用户回答回答于

该语言明确允许你将任何对象视为一个数组的单个元素。当你需要一个序列,想要复制一个普通的对象等时,这是非常好的。

因此,每个指针都是以下之一:

1.一个空指针,

2.指向数组元素的指针,

3.指向超出数组元素的指针,或

4.无效

虽然你可以区分情况1和2或3,但其余部分需要分析潜在的当前运行程序的完整历史记录。

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问36 回答
  • 富有想象力的人

    3 粉丝0 提问29 回答
  • o o

    4 粉丝494 提问27 回答
  • 学生

    3 粉丝476 提问27 回答

扫码关注云+社区

领取腾讯云代金券