对于资本主义模拟器我的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,
我怀疑一定是错的。
谢谢!
答案 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
函数的不同副本(通常是个坏主意)。