C ++ - For循环不起作用

时间:2015-05-23 05:56:43

标签: c++ for-loop

对于资本主义模拟器我的for循环(用于调试)我没有工作,因为它在ix = 0时退出(它只执行循环体一次)。 我也相信它在语法上是正确的(来自其他问题)。

这是我的代码(我遗漏了变量):

void print_things(String2Double b, String2Double up_cost, String2Double tFinish, string* bNames) {
    // Just for debugging!
    for (int ix=0;ix<(sizeof(bNames)/sizeof(bNames[0]));ix++) {
        cout << "Count of business " << bNames[ix] << ": " << b[bNames[ix]] << endl;
        cout << "Upgrade cost for " << bNames[ix] << ": " << up_cost[bNames[ix]] << endl;
        cout << "Time to finish for " << bNames[ix] << ": " << tFinish[bNames[ix]] << endl;
        cout << ix << endl;
    }
}

我还打印了bNames[]的大小,即9,它只打印ix = 0, 我怀疑一定是错的。

谢谢!

2 个答案:

答案 0 :(得分:1)

这里bNames是指针,而不是数组。

答案 1 :(得分:1)

表达式

(sizeof(bNames)/sizeof(bNames[0]))

无法正常工作。

这部分可能是你在没有理解的情况下复制的,因为它只对数组有效,而对指针无效。同时在函数中将参数声明为bNames[]也不会起作用。

使用指针时,需要显式传递元素数。

C ++中更好的方法是使用std::vector(但强烈建议您先了解它的工作原理)。

修改

如果您在编译时知道大小,则只能在C ++中传递数组引用(而非数组),并使用语法:

void print_i10(int (&a)[10]) {
    // `a` here is a reference to an array of 10 integers
}

还可以将数组传递给函数模板,让模板在编译时推断出数组大小;例如:

template<typename T, int N>
void print(const char *format, const T (&a)[N]) {
    printf("[");
    for (int i=0; i<N; i++) {
        if (i) printf(", ");
        printf(format, a[i]);
    }
    printf("]\n");
}

int main(int argc, const char *argv[]) {
    int ia[10] = {1,2,3,4,5,6,7,8,9,10};
    const char *sa[] = {"this", "that", "hmmm..."};

    print("%i", ia);
    print("'%s'", sa);

    return 0;
}

但这意味着对于每个元素类型和元素大小,您将获得程序中print函数的不同副本(通常是个坏主意)。