指针疯狂,我无法弄明白

时间:2014-03-30 10:18:51

标签: c++ c pointers

我有一个我不明白的指针问题,希望你能帮助我。

int main()
{
    int tab[] = {1,2,3};
    int *ptr;
    ptr=tab; // this is where my doubt lies
    cout << &ptr << "," << ptr << "," << *ptr << "," << &tab << "," << tab << "," << *tab << endl;
    return(0);
}

把指针指向你想要的不应该做的事,例如ptr =&amp; something ?? 如果有人能向我解释,我很感激。 感谢

3 个答案:

答案 0 :(得分:3)

数组可以衰减成指向第一个元素的指针,所以当你这样做时:

ptr=tab;
RHS中的

tab衰减为指向数组int*的第一个元素的tab。所以ptr现在指向该元素。

答案 1 :(得分:3)

C数组尽可能衰减成指针。用线

ptr=tab;

您可能会遇到与

类似的行为
ptr=&tab;

但是类型不同:在第一种情况下,你要求一个int指针,在后一种情况下,你要求指向一个具有特定类型的int数组。

答案 2 :(得分:2)

在C中(我认为可能同样适用于C ++)当数组名称本身使用时,在大多数情况下(*)它会转换为指向其第一个元素的指针。

下面两行实际上是一样的;第一个有隐式转换

ptr = tab;
ptr = &(tab[0]);

(*)此规则的例外情况是当数组用作sizeof运算符(sizeof tab)或“地址”运算符(&tab)的操作数时