Как передать массив структуры с помощью указателя в c/c ++?

в коде C я застреваю для передачи массива структуры к функции, вот код, который напоминает мою проблему:

typedef struct
{
   int x;
   int y;
   char *str1;
   char *str2;
}Struct1;

void processFromStruct1(Struct1 *content[]);
int main()
{
    Struct1 mydata[]=
    { {1,1,"black","cat"},
      {4,5,"red","bird"},
      {6,7,"brown","fox"},
    };

    processFromStruct1(mydata);//how?!?? can't find correct syntax

    return 0;
}

void processFromStruct1(Struct1 *content[])
{
    printf("%s", content[1]->str1);// if I want to print 'red', is this right?
        ...
}

Ошибка компиляции в msvc - что-то вроде этого:

error C2664: 'processFromStruct1' : cannot convert parameter 1 from 'Struct1 [3]' to 'Struct1 *[]'
1>       Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Как решить это? tnx.

9
задан mhd 2 March 2010 в 03:52
поделиться

3 ответа

У вас почти получилось, либо this

void processFromStruct1(Struct1 *content);

либо this

void processFromStruct1(Struct1 content[]);

и, как Alok указывает в комментариях, измените this

content[1]->str1

на this

content[1].str1

Ваш массив - это массив структур, а не массив указателей, поэтому после выбора конкретной структуры с помощью [1] нет необходимости в ее дальнейшем разыменовании.

13
ответ дан 4 December 2019 в 13:01
поделиться

Попробуйте

processFromStruct1( & mydata[ i ] ); // pass the address of i-th element of mydata array

и метод to

void processFromStruct1(Struct1 *content )
{
    printf("%s", content->str1);
        ...
}

(2-я часть уже отмечена Джоном Кнуллером и Алоком).

2
ответ дан 4 December 2019 в 13:01
поделиться

Джон Кнеллер дал идеальный синтаксис, я пытаюсь объяснить некоторые основные вещи, я надеюсь, что он разрешит ваши недоразумения в будущем. Это очень похоже на передачу указателя на функцию в C. Конечно, struct также является указателем

, поэтому мы можем передать значение двумя способами 0. Через указатель 0. Через массив (поскольку мы используем array of struct)

, так что теперь проблема проста: Вы должны указать тип данных переменной, как мы это делаем в обычных указателях, здесь тип данных определяется пользователем ( это означает структуру) Struct1, затем имя переменной, это имя переменной может быть указателем или именем массива (выберите совместимый способ).

1
ответ дан 4 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: