理解一段C代码背后的逻辑

理解一段C代码背后的逻辑,c,C,如果你们能解释一下为什么下面的递归代码没有打印“test”这个词,我会很高兴的。提前谢谢 void drawTetriminosEachPosition(int **tetriminos, char **dBoard, int **tBoard, int i){ char c; char **dBoard2; if(tetriminos[i] == '\0') { return; } else { dBoard2 = dBoard;

如果你们能解释一下为什么下面的递归代码没有打印“test”这个词,我会很高兴的。提前谢谢

void drawTetriminosEachPosition(int **tetriminos, char **dBoard, int **tBoard, int i){
  char c;
  char **dBoard2;

  if(tetriminos[i] == '\0')
  {
      return;
  }    
  else
  {
     dBoard2 = dBoard;
     DrawTetrimino(tBoard, tetriminos[i], dBoard, i+65);
  }
  i++;
  return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));

  ft_putstr("test");
  if(checkChar(tBoard,tetriminos[i]))
  {
      dBoard = dBoard2;
      return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));
  }     
}

返回后的语句永远不会执行。自从第一次

return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));

不依赖于任何条件,以下代码不会执行。

返回后的语句永远不会执行。自从第一次

return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));

不依赖于任何条件,以下代码不执行。

当控件到达
返回…
时,它只返回,并且不执行下一行。也许你错过了其中的一些逻辑

现在你可以删除这部分了,这没关系

ft_putstr("test");
  if(checkChar(tBoard,tetriminos[i]))
  {
      dBoard = dBoard2;
      return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));
  }  

当控件到达
return…
时,它将返回,并且不会执行下一行。也许你错过了其中的一些逻辑

现在你可以删除这部分了,这没关系

ft_putstr("test");
  if(checkChar(tBoard,tetriminos[i]))
  {
      dBoard = dBoard2;
      return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));
  }  

为什么要打印“测试”?
return
语句之后的任何操作都没有执行似乎我仍然不太理解递归,我认为一旦tetriminos[i]='\0'它将返回到drawTetriminosEachPosition的上一个调用,并从该点继续,但您正在返回!删除return-只需在ft_putstr之前调用函数即可。它会这样做,除了那里有另一个
return
语句(
return(drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));
),这意味着下一步在执行过程中,是将
返回
再次从函数中删除是的,我将继续删除这两个返回并重新考虑逻辑,谢谢各位,这真的很有帮助,我在上面停留了一个小时。它为什么要打印
“test”
return
语句之后的任何操作都没有执行似乎我仍然不太理解递归,我认为一旦tetriminos[i]='\0'它将返回到drawTetriminosEachPosition的上一个调用,并从该点继续,但您正在返回!删除return-只需在ft_putstr之前调用函数即可。它会这样做,除了那里有另一个
return
语句(
return(drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));
),这意味着下一步在执行过程中,是将
返回
再次退出函数是的,我将继续删除两个返回并重新考虑逻辑,谢谢各位,这真的很有帮助,我坚持了一个小时,现在我知道我错在哪里了,谢谢,我要把这个给考拉,因为他是第一个好的,现在我知道我错在哪里了,谢谢,我要把这个给考拉因为他是第一个谢谢我想我现在知道怎么修了谢谢我想我现在知道怎么修了