2015-04-07 3 views

ответ

6

Вы хотите указатель на указатель на char:

#include <stdio.h> 

static void myMethod(void *args) 
{ 
    char **ptr = args; 

    printf("%s\n", ptr[1]); 
} 

int main(void) 
{ 
    void *ptr; 
    char *args[3]; 

    args[0]="Arg1"; 
    args[1]="Arg2"; 
    args[2]="Arg3"; 
    ptr = args; /* You don't need the & */ 

    myMethod(ptr); 
    return 0; 
} 

Как отметил @Eregrith, передайте число клеток функции для того, чтобы предотвратить отказ от доступа ограничений:

#include <stdio.h> 

static void myMethod(void *args, size_t elems) 
{ 
    char **ptr = args; 

    for (size_t i = 0; i < elems; i++) 
     printf("%s\n", ptr[i]); 
} 

int main(void) 
{ 
    void *ptr; 
    char *args[3]; 

    args[0]="Arg1"; 
    args[1]="Arg2"; 
    args[2]="Arg3"; 
    ptr = args; 

    myMethod(ptr, sizeof(args)/sizeof(args[0])); 
    return 0; 
} 
+4

Я бы посоветовал также пропустить количество ячеек actuel в вашем массиве, чтобы избежать потенциального отказа от ссылок – Eregrith

+0

Спасибо! Я не знал, как отличить «char * []». – user2071938

+1

@Eregrith, богиня, отредактирована. –