如何结束通过指针数组的for循环

时间:2016-03-06 01:39:27

标签: c arrays pointers for-loop

我无法结束} catch (Exception ex) { if(transaction != null) { try { transaction.rollback(); } catch (Exception e) { // Log error } } ex.printStackTrace(); System.out.println("Transaction is rolled back."); } finally { if(session != null) { try { session.close(); } catch (Exception e) { // Log error } } if(sessionFactory != null) { try { sessionFactory.close(); } catch (Exception e) { // Log error } } } 循环。即使看起来应该这样做,它仍会继续。

它通过一组指针数组,当最后一个指针返回for时,它应该结束。但它继续。我觉得我错过了一些相当简单的东西。任何想法都表示赞赏。

NULL

3 个答案:

答案 0 :(得分:0)

在每次运行之前评估条件,因此代码的前几部分扩展为:

int idx = 0 ;
while ( 1 )
{
    if ( shape[idx] == NULL ) break ;
    shape[idx] = getShape() ;
    ++idx ;
    if ( shape[idx] == NULL ) break ;
    shape[idx] = getShape() ;
    ++idx ;
    // and so on
}

我假设您在getShape返回NULL之前尝试运行,请尝试以下操作:

int idx = -1 ;
do
{
    shape[++idx] = getShape() ;
} while ( shape[idx] != NULL ) ;

另请注意,我假设您的示例中省略了额外的检查以用于示例目的,但我会提及以防您始终始终检查结束您的C-Array也是如此,因此您不必踩踏在分配的数组段之后的内存。

修改

这里是我在一个更完整的代码示例中讨论的其他检查:

enum {
    kArraySize = 10
} ;
shape* shapes[kArraySize] ; // note: named it "shapes" instead of "shape" to avoid a name collision
int idx = -1 ;
do
{
    ++idx ; // *prepare* to go to the next index
    if ( idx >= kArraySize ) // only need ==, but >= gives extra safety
        break ; // stop before we go past the end of the array!
    shapes[idx] = getShape() ;
} while ( shapes[idx] != NULL ) ;

答案 1 :(得分:0)

for循环可以简化为......

for(int idx = 0; idx<10 && (shape[idx]=getShape()) != NULL; ++idx);

您可以在同一声明中进行分配和比较。

您可能想要动态地计算出数组的大小,正如其他答案所暗示的那样。为简单起见,我刚刚编写了10个硬编码。

对于这个特定的例子,最好简单地声明一个常量来定义数组,然后在for循环条件中使用这个常量。

答案 2 :(得分:-1)

如果shape [10]为NULL,则不确定。它可能有一些内容,但尚未删除。

试试这个:

shape *shape[n];

int lng = sizeof(shape)/sizeof(shape);

for(int idx = 0; idx < lng; ++idx)
{
  shape[idx] = getShape();
}