в коде 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.
У вас почти получилось, либо this
void processFromStruct1(Struct1 *content);
либо this
void processFromStruct1(Struct1 content[]);
и, как Alok указывает в комментариях, измените this
content[1]->str1
на this
content[1].str1
Ваш массив - это массив структур, а не массив указателей, поэтому после выбора конкретной структуры с помощью [1] нет необходимости в ее дальнейшем разыменовании.
Попробуйте
processFromStruct1( & mydata[ i ] ); // pass the address of i-th element of mydata array
и метод to
void processFromStruct1(Struct1 *content )
{
printf("%s", content->str1);
...
}
(2-я часть уже отмечена Джоном Кнуллером и Алоком).
Джон Кнеллер дал идеальный синтаксис, я пытаюсь объяснить некоторые основные вещи, я надеюсь, что он разрешит ваши недоразумения в будущем. Это очень похоже на передачу указателя на функцию в C. Конечно, struct также является указателем
, поэтому мы можем передать значение двумя способами 0. Через указатель 0. Через массив (поскольку мы используем array of struct)
, так что теперь проблема проста: Вы должны указать тип данных переменной, как мы это делаем в обычных указателях, здесь тип данных определяется пользователем ( это означает структуру) Struct1, затем имя переменной, это имя переменной может быть указателем или именем массива (выберите совместимый способ).