我有一个我不明白的指针问题,希望你能帮助我。
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 ?? 如果有人能向我解释,我很感激。 感谢
答案 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
)的操作数时