C++ 函数 return 值:我的函数设置为 return 一个指针,但没有 returning 任何东西
C++ Function return value: my function is set to return a pointer but is not returning anything
所以,我正在做一个算法,目的是 运行 二分查找。但问题是即使算法在我的 return 函数内部工作也根本不起作用,我总是收到的 return 是 0。
这是进行搜索的函数:
value_type* bsearch( value_type * first, value_type * last, value_type value ){
value_type* mid;
mid = (last - first)/2 + first;
if(first>last){
std::cout << "first>last" << value << *mid << '\n';
return nullptr;
}
if(*mid==value){
std::cout << "Found " << mid << " " << *mid << '\n';
return mid;
}
if(*mid>value){
last = mid - 1;
std::cout << "*mid>value " << mid << " " << *mid << '\n';
bsearch(first,last,value);
}else{
first = mid + 1;
std::cout << "*mid<value " << mid << " " << *mid << '\n';
bsearch(first,last,value);
}
return nullptr;
}
这里是 运行 bsearch 函数。即使 mid 是有效指针,result 也始终等于 0,因此输出始终为 "Search failed!".
void run_bsearch(){
value_type A4[]{ 1, 2, 3, 4, 5, 6, 7 };
std::cout << ">>> A4[ " << print( std::begin(A4), std::end(A4) ) << "]\n";
for ( auto i(0u) ; i <= (sizeof(A4)/sizeof(A4[0]))+1 ; ++i ){
std::cout << ">>> Looking for value \'" << i << "\' in A4: ";
value_type* result = bsearch( std::begin(A4), std::end(A4), i );
std::cout << "Result: "<<result << "\n";
if( result == nullptr ){
std::cout << "Search failed!\n";
}else{
std::cout << "Located target element at position " << result - std::begin(A4) << std::endl;
}
}
}
程序是这样运行的:
if(*mid>value){
last = mid - 1;
std::cout << "*mid>value " << mid << " " << *mid << '\n';
bsearch(first,last,value);
}else{
first = mid + 1;
std::cout << "*mid<value " << mid << " " << *mid << '\n';
bsearch(first,last,value);
}
这里的问题是您没有返回递归 bsearch
函数的结果。
所以,我正在做一个算法,目的是 运行 二分查找。但问题是即使算法在我的 return 函数内部工作也根本不起作用,我总是收到的 return 是 0。 这是进行搜索的函数:
value_type* bsearch( value_type * first, value_type * last, value_type value ){
value_type* mid;
mid = (last - first)/2 + first;
if(first>last){
std::cout << "first>last" << value << *mid << '\n';
return nullptr;
}
if(*mid==value){
std::cout << "Found " << mid << " " << *mid << '\n';
return mid;
}
if(*mid>value){
last = mid - 1;
std::cout << "*mid>value " << mid << " " << *mid << '\n';
bsearch(first,last,value);
}else{
first = mid + 1;
std::cout << "*mid<value " << mid << " " << *mid << '\n';
bsearch(first,last,value);
}
return nullptr;
}
这里是 运行 bsearch 函数。即使 mid 是有效指针,result 也始终等于 0,因此输出始终为 "Search failed!".
void run_bsearch(){
value_type A4[]{ 1, 2, 3, 4, 5, 6, 7 };
std::cout << ">>> A4[ " << print( std::begin(A4), std::end(A4) ) << "]\n";
for ( auto i(0u) ; i <= (sizeof(A4)/sizeof(A4[0]))+1 ; ++i ){
std::cout << ">>> Looking for value \'" << i << "\' in A4: ";
value_type* result = bsearch( std::begin(A4), std::end(A4), i );
std::cout << "Result: "<<result << "\n";
if( result == nullptr ){
std::cout << "Search failed!\n";
}else{
std::cout << "Located target element at position " << result - std::begin(A4) << std::endl;
}
}
}
程序是这样运行的:
if(*mid>value){
last = mid - 1;
std::cout << "*mid>value " << mid << " " << *mid << '\n';
bsearch(first,last,value);
}else{
first = mid + 1;
std::cout << "*mid<value " << mid << " " << *mid << '\n';
bsearch(first,last,value);
}
这里的问题是您没有返回递归 bsearch
函数的结果。