Mik*_*e B 2 c++ arrays for-loop
我试图遍历一个double未知大小的数组.
为什么以下不起作用?
for (unsigned int = 1; i < sizeof(anArray)/sizeof(double); i++) {
...
}
Run Code Online (Sandbox Code Playgroud)
一切都编译好(g++ -Wall -Werror -std=c++11 app.cpp -o app),但程序甚至没有进入循环.
功能齐全:
struct stock_data {
int sell_index;
int buy_index;
double profit;
};
stock_data max_profit(double price_array[]) {
int sell_index = -1, buy_index = -1,
min = 0;
double profit = 0.0;
for(int i = 1; i < size; i++) {
if(price_array[i] - price_array[min] > profit) {
sell_index = min;
buy_index = i;
profit = price_array[i] - price_array[min];
}
if(price_array[i] < price_array[min]) {
min = i;
}
}
return {sell_index, buy_index, profit};
}
int main() {
double yesterday[] = {0.1, 0.2, 0.3, 0.4};
stock_data data = max_profit(yesterday);
cout << data.profit << endl;
}
Run Code Online (Sandbox Code Playgroud)
sizeof(anArray)anArray可能返回类型的大小*double。您必须将数组大小作为附加参数传递或使用std::vector它的size方法。
看一下 C 主函数,main(argc, argv)其中argv是程序的参数及其argc计数。或者采用字符串,它们的结尾由决定其结尾的特殊字符 \0 确定。但这很容易出错。
在 C/C++ 中,没有其他方法可以处理数组。
在C++中,运算符sizeof是一个编译时运算符.也就是说,它的值是由编译器在运行时计算的.
因此,如果您说数组的大小未知,则编译器无法计算数组占用的内存大小.
所以很明显,anArray是指向你可能传递给函数的数组的第一个元素的指针.
这样表达
sizeof(anArray)/sizeof(double)
Run Code Online (Sandbox Code Playgroud)
等同于表达
sizeof( double * )/sizeof( double ).
Run Code Online (Sandbox Code Playgroud)
您还必须将数组的大小显式传递给函数.
考虑到通过值传递给函数的数组将转换为指向其第一个元素的指针.
或者另一种方法是使用conteiner std::vector<double>而不是数组.
你可以声明你的功能
stock_data max_profit(double price_array[], size_t size );
Run Code Online (Sandbox Code Playgroud)
并称之为
stock_data data = max_profit( yesterday,
sizeof( yesterday ) / sizeof( *yesterday ) );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5315 次 |
| 最近记录: |