一个很容易糊涂的问题.
在函数的返回值中, void 是没有任何返回值, 而 void * 是返回任意类型的值的指针.
还是看代码吧:
#include <stdlib.h>
#include <stdio.h>
void voidc(int a);
void* voidcp(int *a);
int main(){
int a=10;
int *ap;
voidc(a);
ap = (int*)voidcp(&a);
printf("%d\n",*ap);
return 0;
}
void voidc(int a){
printf("%d\n",a);
return; // 没有返回值
}
void* voidcp(int *a){
printf("%d\n", *a);
return a; // 返回 int *
}
二分查找的利用代码:
bsearch
Performsabinarysearchofasortedarray.
void*bsearch(constvoid*key,constvoid*base,size_tnum,size_twidth,int(__cdecl*compare)(constvoid*elem1,constvoid*elem2));
RoutineRequiredHeaderCompatibility
bsearch<stdlib.h>and<search.h>ANSI,Win95,WinNT
Foradditionalcompatibilityinformation,seeCompatibilityintheIntroduction.
Libraries
LIBC.LIBSinglethreadstaticlibrary,retailversion
LIBCMT.LIBMultithreadstaticlibrary,retailversion
MSVCRT.LIBImportlibraryforMSVCRT.DLL,retailversion
ReturnValue
bsearchreturnsapointertoanoccurrenceofkeyinthearraypointedtobybase.Ifkeyisnotfound,thefunctionreturnsNULL.Ifthearrayisnotinascendingsortorderorcontainsduplicaterecordswithidenticalkeys,theresultisunpredictable.
Parameters
key
Objecttosearchfor
base
Pointertobaseofsearchdata
num
Numberofelements
width
Widthofelements
compare
Functionthatcomparestwoelements:elem1andelem2
elem1
Pointertothekeyforthesearch
elem2
Pointertothearrayelementtobecomparedwiththekey
Remarks
Thebsearchfunctionperformsabinarysearchofasortedarrayofnumelements,eachofwidthbytesinsize.Thebasevalueisapointertothebaseofthearraytobesearched,andkeyisthevaluebeingsought.Thecompareparameterisapointertoauser-suppliedroutinethatcomparestwoarrayelementsandreturnsavaluespecifyingtheirrelationship.bsearchcallsthecompareroutineoneormoretimesduringthesearch,passingpointerstotwoarrayelementsoneachcall.Thecompareroutinecomparestheelements,thenreturnsoneofthefollowingvalues:
ValueReturnedbycompareRoutineDescription
<0elem1lessthanelem2
0elem1equaltoelem2
>0elem1greaterthanelem2
Example
/*BSEARCH.C:Thisprogramreadsthecommand-line
*parameters,sortingthemwithqsort,andthen
*usesbsearchtofindtheword"cat."
*/
#include<search.h>
#include<string.h>
#include<stdio.h>
intcompare(char**arg1,char**arg2);/*Declareafunctionforcompare*/
voidmain(intargc,char**argv)
{
char**result;
char*key="cat";
inti;
/*SortusingQuicksortalgorithm:*/
qsort((void*)argv,(size_t)argc,sizeof(char*),(int(*)(const
void*,constvoid*))compare);
for(i=0;i<argc;++i)/*Outputsortedlist*/
printf("%s",argv[i]);
/*Findtheword"cat"usingabinarysearchalgorithm:*/
result=(char**)bsearch((char*)&key,(char*)argv,argc,
sizeof(char*),(int(*)(constvoid*,constvoid*))compare);
if(result)
printf("\n%sfoundat%Fp\n",*result,result);
else
printf("\nCatnotfound!\n");
}
intcompare(char**arg1,char**arg2)
{
/*Compareallofbothstrings:*/
return_strcmpi(*arg1,*arg2);
}
Output
[C:\work]bsearchdogpighorsecathumanratcowgoat
bsearchcatcowdoggoathorsehumanpigrat
catfoundat002D0008
SearchingandSortingRoutines
SeeAlso_lfind,_lsearch,qsort
纯真数据库的处理代码:
char c_text[1024], l_text[1024]; //返回用
void *result[] = {c_text, l_text};//返回用
void* __cdecl _GetAddress(const char *IPstr)
{
if( !loaded || !ptr )
return noload_result;
unsigned int ip = str2ip(IPstr);
get_ipwry(ip);
return result;
}
#include <iostream>
#include "ipsearcher.h"
using namespace std;
#pragma comment(lib, "ipsearcher.lib")
int main(void)
{
typedef void *RESULT[2];//返回用
cout <<IPCount() << endl;
cout << DateTime() << endl;
char **pstr = (char**)_GetAddress("192.168.1.1");
cout << pstr[0] << pstr[1] << endl;
return 0;
}