对不起,必须在某个地方回答此问题,但我没有找到。
我有一个代码:
const int * tableCards[9];
int hand1card1 = 0;
tableCards[0] = & hand1card1;
int hand1card2 = 1;
tableCards[1] = & hand1card2;
int * flop1 = & tableCard[0];
tableCards[2] = flop1;
cout << * flop1 << endl;
cout << * tableCards[2] << endl;
flop1++;
cout << * flop1 << endl;
cout << * tableCards[2] << endl;
tableCard[48] is an array of pointers to ints
该代码有效,但是我想更改
tableCards[2] = flop1;
行以使* tableCards[2]
返回由* flop1
指向的元素的实际值。在此代码中,* flop1返回我想要的值,但是* floppy [card2]在增加flop1之后保持不变。我以为
tableCards[2] = & (* flop1);
会将* flop1指向的值的地址分配给int指针tableCards [2],但是在增加flop1之后,tableCards [2]的值保持不变。我不想在指针上使用指针数组而不是指针数组,因为所需的4/9值只是整数,而不是整数上的指针。编辑:请注意tableCards [9]与tableCard [48]不同。很抱歉,当我看到评论和答案时,这个问题一定会令人困惑。
最佳答案
这不应该编译:
int * flop1 = & tableCard[0];
tableCard[0]
的类型是int*
,因此当您使用&
引用它时,它会变成int**
。您正在将其分配给int*
。至少它应该生成一个编译器警告。因此,
flop1
指向地址tableCard[0]
,*flop1
为您提供存储在tableCard[0]
处的值(指针),而**flop1
为您提供tableCard[0]
所指向的值。但是,由于您为flop1
提供了错误的类型(int*
而不是int**
),所以您不能这样做。我将此基于您提出的具有另一个数组的注释:
int * tableCard[48];
我认为您的意思是:
int * flop1 = tableCard[0];
tableCards[2] = flop1;
现在,当您增加
flop1
时,它只会更改指针。 tableCards[2]
处的指针仍将指向与tableCard[0]
所指向的值相同的值。但是这很顽皮:
flop1++;
cout << * flop1 << endl;
flop1
是存储在tableCard[0]
处的指针。当您增加它然后使用它时,您将其视为一个数组。也许是吗?但是可能不是。您不知道flop1
现在指向什么内存。[编辑]在考虑了这段代码可能要实现的目标之后...
因此,的确如此,如果您期望
flop1
现在指向第二个数组元素,则需要使用双指针(int**
)。这意味着flop1
现在是tableCard
数组中的迭代器,而不是元素...因此,当您对其进行递增时,它现在指向存储在tableCard[1]
处的指针,而tableCards[2]
仍包含(但未指向)tableCard[0]
。int ** flop1 = & tableCard[0];
tableCards[2] = *flop1;
cout << **flop1 << endl;
cout << *tableCards[2] << endl;
flop1++;
cout << **flop1 << endl;
cout << *tableCards[2] << endl;
再次基于推论进行进一步的编辑...我怀疑您可能想将
tableCard
数组定义为:int tableCard[48];
在这种情况下,您的代码应正确无误,而无需其他更改。好吧,大概是。整个问题似乎有点令人怀疑。