如何检查指针是指向数组还是单个int或char

时间:2016-04-05 16:31:41

标签: c++ pointers

我想知道指针是指向数组还是指向整数。我有一个函数,它将两个指针( int char )作为输入,并告诉指针是指向数组还是指向整数

pointer=pointer+4;
pointer1=pointer1+4;

这是个好主意吗?

4 个答案:

答案 0 :(得分:1)

这不是个好主意。仅使用原始指针,无法知道它们是指向数组还是单个值。

用作数组的指针和指向单个值的指针是相同的 - 它们都只是一个内存地址 - 因此没有信息可用于区分它们。如果你发布你想要最终做的事情,那么可能有一个解决方案不依赖于将指针与数组和单个值进行比较。

答案 1 :(得分:1)

就像其他人在这里所说的那样,C并不知道指针指向的是什么。但是,如果你应该选择沿着这条路走下去,你可以在数组的整数或第一个位置放一个sentinel值来表示它是什么......

#define ARRAY_SENTINEL -1

int x = 0;
int x_array[3] = {ARRAY_SENTINEL, 7, 11};

pointer = &x_array[0];

if (*pointer == ARRAY_SENTINEL)
{
   // do some crazy stuff
}

pointer = &x;

if (*pointer != ARRAY_SENTINEL)
{
   // do some more crazy stuff
}

答案 2 :(得分:0)

实际上指针指向一块内存,而不是整数或数组。无法区分整数是单个变量还是整数是数组元素,两者在内存中看起来完全相同。 你能使用一些C ++数据结构,例如std :: vector吗?

答案 3 :(得分:-1)

对于C ++问题,答案很简单。不要在C ++中使用C风格的动态数组。无论何时需要C风格的动态数组,都应该使用std::vector

这样你就永远不会猜到指针指向的是什么,因为只有std::vector会持有一个数组。