2016-09-12 5 views
-1

В моем коде у меня есть STRUCКак назначить struc указателю пустоты, проходящему через параметры?

struct Test { 
    int a; 
    int b; 
    char c; 
}; 

С моей функции:

int TestFunction(void* ptr){ 
    struct Test test; 
    test.a = 0; 
    test.b = 1; 
    strcpy(c,"hello"); 

    return 0; 
    } 

Теперь связать временную STRUC к объемному PTR я прошел в у меня есть

struct Test* temp = (struct Test*)ptr; 
struct Test test = *temp; 

ли это правильный способ связать структуры с void ptrs? Есть ли более простой способ?

+0

"* Это правильный способ связывания структур с void ptrs? *" - Это * * путь. Правильно ли это зависит от ожидаемых результатов. Ожидаете ли вы, что структура будет видна в указанной структуре? – Dolda2000

+0

Вы хотите изменить исходную структуру, которая была передана или только ее копия? И что такое 'strcpy (c,« hello »),' означает делать как 'c', не объявлен? Кроме того, указатели 'void' могут быть назначены любому другому типу указателя. Поэтому приведение не требуется и, следовательно, проще: 'struct Test * temp = ptr;' – kaylum

+0

@ Dolda2000, yep Я хочу изменить void ptr struc, когда функция возвращает – chonglawr

ответ

1

Поскольку вы хотите иметь возможность изменять указанную структуру, ваш пример кода не подходит. То, что он делает, это создать локальную копию направленной структуры и изменить локальную копию вместо исходного объекта.

То, что вы хотите сделать, скорее, заключается в следующем:

int TestFunction(void *ptr) { 
    struct Test *test = ptr; 
    test->a = 0; 
    test->b = 1; 

    return 0; 
} 

Синтаксис a->b эквивалентно (*a).b, а это означает, что он относится к тому, что test указывает.

+0

спасибо! Можете ли вы показать пример с массивами и строками? будет ли он выглядеть как test-> arr = myarr, предполагая, что myarr является объявленным массивом и test-> str = mystring? – chonglawr

+0

@chonglawr: Он работает точно так же, как для локальной переменной типа, который вы хотите изменить. Что касается массивов, вы никогда не можете назначить массивы, будь то локальные переменные или элементы структуры. – Dolda2000

+0

Просто, чтобы уточнить, почему бы мой исходный код работать, когда я создаю temp и укажу его на ptr, в тесте, которое я получаю значение temp, не то же самое, что и у вас в установленном тесте, равном temp, а вы - для структуры? – chonglawr

 Смежные вопросы

  • Нет связанных вопросов^_^