Эти два утверждения возврата не кажутся равными, и мне интересно, почему?Почему эти два возвращения bool равны?
bool isFound = false;
return isFound;
Возвращает true независимо от значения isFound.
bool isFound = false;
return isFound ? true: false;
Возвращает значение isFound в этом случае false.
Я думаю, ответ может заключаться в том, что isFound является локальной переменной и уничтожается после завершения функции.
Возвращаемый тип функции - const bool, но const, похоже, не имеет значения.
bool SecventialSearch(int* arr, int size, int target, long* time){
struct timeval start, stop;
bool isFound = false;
long seconds, useconds;
int* iter = arr;
gettimeofday(&start, NULL);
while (*iter != target && iter != &arr[size-1])
iter++;
if (*iter == target)
isFound = true;
gettimeofday(&stop, NULL);
seconds = stop.tv_sec - start.tv_sec;
useconds = stop.tv_usec - start.tv_usec;
*time = ((seconds)*1000000 + useconds);
return isFound;
}
Возвращает true в следующем коде в главном, даже если цель не находится в массиве. Изменение к isFound? true: false; заставляет его работать должным образом.
if (SecventialSearch(testArr,testArrSize,5, &test))
printf("Is true.");
else
printf("Is false.");
Оба одинаковые. И «* Возвращает true независимо от значения isFound. *» Неверно. "* ... isFound - это локальная переменная и уничтожается после завершения функции. *" - Да, но вы не используете его адрес. Вы просто возвращаете значение (true или false). Таким образом, это не проблема. –
Предоставьте [минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve). –
Первый код возвращает false. Я не знаю, как он может вернуть true .... – LPs