C++ C++;函数、数组和指针
关于这一点已经有很多了,但没有一个解决了我的问题,或者我只是不明白答案。我只是尝试从函数返回一个数组 而且,我必须把我所有的函数放在主函数之上,这对我来说也很奇怪 下面是我尝试使用指针时发生的情况:C++ C++;函数、数组和指针,c++,arrays,function,pointers,C++,Arrays,Function,Pointers,关于这一点已经有很多了,但没有一个解决了我的问题,或者我只是不明白答案。我只是尝试从函数返回一个数组 而且,我必须把我所有的函数放在主函数之上,这对我来说也很奇怪 下面是我尝试使用指针时发生的情况: int * RookMoves(int startingPosition, bool isWhite, int theBoard[64]){ int startingPositionXY[2] = { startingPosition % 8, (startingPosition
int * RookMoves(int startingPosition, bool isWhite, int theBoard[64]){
int startingPositionXY[2] = { startingPosition % 8, (startingPosition - (startingPosition % 8)) / 8 };
int possibleRookPositions[14];
int possiblePosXY[2];
int counter = 0;
for (int h = 0; h < 2; h++)
{
int counter2 = 1;
for (int j = 0; j < 2; j++)
{
counter2 *= -1;
for (int i = 1; i < 8; i++)
{
int other = startingPositionXY[h] + (i * counter2);
int hInverted = (h + abs(h - 1)) * abs(h - 1); // 0 + 1 * 1 = 1 but 1 + 0 * 0 = 0
if (other < 8 && other > -1)
{
possiblePosXY[h] = other;
possiblePosXY[hInverted] = startingPositionXY[hInverted];
int movesOneDim = possiblePosXY[0] + (possiblePosXY[1] * 8);
if (CalculateSameColor(isWhite, theBoard[movesOneDim])) {
possibleRookPositions[counter] = movesOneDim;
counter++;
if (CalculateEnemy(isWhite, theBoard[movesOneDim]))
{
break;
}
}
else
{
break;
}
}
else
{
break;
}
}
}
}
for (int i = counter; i < 14; i++) //simply changing any unused elements to -1 for later recognition
{
possibleRookPositions[i] = -1;
}
cout << sizeof(possibleRookPositions) / sizeof(possibleRookPositions[0]) << ' '; // returns 14 just as it should
return possibleRookPositions;
}
int main()
{
int testBoard[64];
for (int i = 0; i < 64; i++) {
testBoard[i] = 0;
}
int* arr = RookMoves(21, true, testBoard);
cout << sizeof(arr) / sizeof(arr[0]); //ouputs: 1, should be 14
}
int*RookMoves(int启动位置,bool为白色,inttheboard[64]){
int startingPositionXY[2]={startingPosition%8,(startingPosition-(startingPosition%8))/8};
int-possibleRookPositions[14];
int-possiblePosXY[2];
int计数器=0;
对于(int h=0;h<2;h++)
{
int计数器2=1;
对于(int j=0;j<2;j++)
{
计数器2*=-1;
对于(int i=1;i<8;i++)
{
int other=启动位置XY[h]+(i*2);
int hInverted=(h+abs(h-1))*abs(h-1);//0+1*1=1,但1+0*0=0
如果(其他<8和其他>-1)
{
可能的eposxy[h]=其他;
可能位置xy[hInverted]=起始位置xy[hInverted];
int movesOneDim=possiblePosXY[0]+(possiblePosXY[1]*8);
如果(计算平均颜色(为白色,则电路板[movesOneDim])){
possibleRookPositions[计数器]=movesOneDim;
计数器++;
如果(CalculateEnemy(为白色,则电路板[movesOneDim]))
{
打破
}
}
其他的
{
打破
}
}
其他的
{
打破
}
}
}
}
for(int i=counter;i<14;i++)//只需将任何未使用的元素更改为-1,以便以后识别
{
可能的RookPositions[i]=-1;
}
CUT< P>我试图从指针中获取siZeof,因为我还不真正理解这些工作是怎么做的,但我所需要做的只是使用指针,而只是初始化我返回的数组,如“static”。这要感谢MikeCAT < P> C++中的一个数组,在“简单”中。代码,要么是STD::vector或STD::Advices。这些可以毫无问题地返回。我想说的是,你的问题是你主要写C,并调用C++。C是很难为初学者准备的。所以,请使用C++,你可以使用。
<> > C样式数组是任何专业C++程序员当然都完全理解的,但是每当我被迫编写这样的代码(由于客户需求的多少)因此,不要太担心,即使是那些能够编写编译器的人,可以使用这个数组代码并产生程序集输出,但在某种程度上仍然有问题。它笨重,而且在今天的C++中几乎没有地方。到底是什么网站说指针应该工作?你应该改用std::vector
。划分sizeofs只对数组有效,而不是指针。1是正确的,因为你只有一个指针。另外,返回指向非静态局部变量的指针也不好,因为它们在从函数返回时将变得无效(从其作用域中退出)。@MarkRansom除法的结果不必是指针的数目。例如,如果sizeof(int*)
为8,sizeof(int)
为4(在64位环境中是合理的配置),您将得到2。将数组声明为静态
可能使它现在可以工作,但这是一个非常脆弱的解决方案,可能会给您带来问题。@Mark Ransom还有什么选择?谢谢。返回std::vector
。谢谢,这让我感觉更好,哈哈,说我在哪里做了什么速度非常重要,使用这个向量库不是更慢吗?我不明白,我是在写C还是怎么写C我应该比C++更快吗?@ TristaLaLeNAND:<代码> vector < /C>比使用一个正确大小的数组可能要慢。但是,f你已经知道正确的大小N,<代码> STD::数组< /C> >如果不是比阿纳尔数组快的话,那么快(“更快”)。部分原因是深层次的技术原因;编译器可以更容易地证明两个std::array
s不重叠)