Reference
#include <iostream>
#include <vector>
int minSearch(std::vector<int> vct, int& foundAtIndex) {
for(auto it = vct.begin(); it != vct.end(); ++it) {
if(*it < vct[foundAtIndex]) {
foundAtIndex = (it - vct.begin());
}
}
return vct[foundAtIndex];
}
int main() {
std::vector<int> vct {4,6,4,65, 3, 76, 456,654};
int foundAtIndex = 0;
minSearch(vct, foundAtIndex);
std::cout << minSearch << " " << foundAtIndex << "\n";
return 0;
}
Очаквах да получа отговор
3 4
а получих
1 4
Малко помощ няма да ми е излишна...
Благодаря, схванах къде греша.
А сега се чудя защо пък ще върне именно 1 а не нещо друго, т.е. от къде идва тая единица?
Зависи от компилатора. Името на функцията, без скоби след него, не е валиден statement и различните компилатори го интерпретират по различен начин. Например:
clang++ генерира следния warning
и програмата отпечатва 1 и 4. Обяснено е ето тук
g++ генерира нещо подобно
и отново извежда 1 и 4. Повече подробнсти тук
Visual C++ обаче инерпретира името на функцията като нейния адрес в code (text) сегмента и отпечатва нещо такова
00007FF73D3A100F 4
Да обобщя - името на функцията е пойнтер и в първите два случая компилаторите просто проверяват дали е валиден (различен от nullptr) и съответно отпечатват true (1). Майкрософтския компилатор просто отпечатва този пойнтер (адреса на функцията) въпреки, че адреса се взема с &minSearch