0

对不起,这必须在某个地方回答,但我还没有找到。

我有一个代码:

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]return 指向的元素的实际值* flop1。在这段代码中,*flop1 返回我想要的值,但 *tableCards[2] 在增加 flop1 后保持不变。

我认为这tableCards[2] = & (* flop1);会将 *flop1 指向的值的地址分配给 int 指针 tableCards[2] 但是在增加 flop1 之后,tableCards[2] 的值保持不变。我不想在指针上使用指针数组而不是指针数组,因为所需的 4/9 值只是整数,而不是整数上的指针。

编辑:请注意,tableCards[9] 与 tableCard[48] 是不同的数组。而且,当我看到评论和答案时,这个问题一定会令人困惑。

4

1 回答 1

1

这不应该编译:

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它只会更改指针。at 的指针tableCards[2]仍将指向与指向相同的值tableCard[0]

但这很顽皮:

flop1++;
cout << * flop1 << endl;

flop1是存储在的指针tableCard[0]。当您增加它然后使用它时,您将它视为一个数组。也许是?但可能不是。你不知道现在的记忆flop1指向什么。

[编辑]在对这段代码可能试图实现的目标进行了更多思考之后......

因此,确实,如果您希望flop1现在指向第二个数组元素,则需要使用双指针 ( int**)。这意味着它flop1现在是数组中的迭代器tableCard,而不是元素......所以当你增加它时,它现在指向存储在的指针tableCard[1]whiletableCards[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];

在这种情况下,您的代码应该是正确的,无需进行其他更改。嗯,大概。整个事情似乎有点可疑。

于 2012-09-10T22:36:05.720 回答