zoukankan      html  css  js  c++  java
  • 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
    ",*ap);
    
        return 0;
    }
    void voidc(int a){ 
        printf("%d
    ",a);
        return;    // 没有返回值
    }
    void* voidcp(int *a){
        printf("%d
    ", *a);
        return a;  // 返回 int *
    }

    二分查找的利用代码:

    bsearch
    Performs a binary search of a sorted array.

    void *bsearch( const void *key, const void *base, size_t num, size_t width, int ( __cdecl *compare ) ( const void *elem1, const void *elem2 ) );

    Routine Required Header Compatibility 
    bsearch <stdlib.h> and <search.h> ANSI, Win 95, Win NT  


    For additional compatibility information, see Compatibility in the Introduction.

    Libraries

    LIBC.LIB Single thread static library, retail version 
    LIBCMT.LIB Multithread static library, retail version 
    MSVCRT.LIB Import library for MSVCRT.DLL, retail version 


    Return Value

    bsearch returns a pointer to an occurrence of key in the array pointed to by base. If key is not found, the function returns NULL. If the array is not in ascending sort order or contains duplicate records with identical keys, the result is unpredictable.

    Parameters

    key

    Object to search for

    base

    Pointer to base of search data

    num

    Number of elements

    width

    Width of elements

    compare

    Function that compares two elements: elem1 and elem2

    elem1

    Pointer to the key for the search

    elem2

    Pointer to the array element to be compared with the key

    Remarks

    The bsearch function performs a binary search of a sorted array of num elements, each of width bytes in size. The base value is a pointer to the base of the array to be searched, and key is the value being sought. The compare parameter is a pointer to a user-supplied routine that compares two array elements and returns a value specifying their relationship. bsearch calls the compare routine one or more times during the search, passing pointers to two array elements on each call. The compare routine compares the elements, then returns one of the following values:

    Value Returned by compare Routine Description 
    < 0 elem1 less than elem2 
    0 elem1 equal to elem2 
    > 0 elem1 greater than elem2 


    Example

    /* BSEARCH.C: This program reads the command-line
     * parameters, sorting them with qsort, and then
     * uses bsearch to find the word "cat."
     */

    #include <search.h>
    #include <string.h>
    #include <stdio.h>

    int compare( char **arg1, char **arg2 ); /* Declare a function for compare */

    void main( int argc, char **argv )
    {
       char **result;
       char *key = "cat";
       int i;

       /* Sort using Quicksort algorithm: */
       qsort( (void *)argv, (size_t)argc, sizeof( char * ), (int (*)(const 
       void*, const void*))compare );

       for( i = 0; i < argc; ++i )    /* Output sorted list */
          printf( "%s ", argv[i] );

       /* Find the word "cat" using a binary search algorithm: */
       result = (char **)bsearch( (char *) &key, (char *)argv, argc,
                                  sizeof( char * ), (int (*)(const void*, const void*))compare );
       if( result )
          printf( " %s found at %Fp ", *result, result );
       else
          printf( " Cat not found! " );
    }

    int compare( char **arg1, char **arg2 )
    {
       /* Compare all of both strings: */
       return _strcmpi( *arg1, *arg2 );
    }


    Output

    [C:work]bsearch dog pig horse cat human rat cow goat
    bsearch cat cow dog goat horse human pig rat
    cat found at 002D0008


    Searching and Sorting Routines

    See Also   _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;
    }


    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    BigInteger实现除法取余
    BigDecimal介绍及BigDecimal实现四舍五入
    Jenkins的凭证管理
    Adapter(适配器)-类对象结构型模式
    singleton(单件)-对象创建型模式
    ProtoType(原型)-对象创建型模式
    Factory Method(工厂方法)-对象创建型模式
    Builder(生成器)-对象创建型模式
    Abstract Factory(抽象工厂)模式
    设计模式-序
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834832.html
Copyright © 2011-2022 走看看