void * 和 void 在函数返回值中的区别

一个很容易糊涂的问题.

在函数的返回值中, 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值