Передача массива struct с typedef в функцию - PullRequest
6 голосов
/ 31 января 2012

Мне нужна помощь с программированием на C.У меня следующая ситуация:

struct Product {
    int code;
    char *name;
    char *spec;
    int quantity;
    float price;
};

typedef struct Product products[8];
products product = {
    {100, "Mouse", "Ottico", 10, 8.30},
    {101, "Tastiera", "Wireless", 6, 15.50},
    {102, "Monitor", "LCD", 3, 150.25},
    {103, "Webcam", "USB", 12, 12.00},
    {104, "Stampante", "A Inchiostro", 6, 100.00},
    {105, "Scanner", "Alta Risoluzione", 9, 70.50},
    {106, "Router", "300 Mbps", 10, 80.30},
    {107, "Lettore Mp3", "10 GB", 16, 100.00}
    };

Пожалуйста, не обращайте внимания на использование вышеупомянутого итальянского языка.

Я бы хотел передать массив структур с именем "product" в функцию.Например, если я хотел сделать что-то вроде

product[1].name = "Computer"

Но внутри функции, как я должен это делать?Я хотел бы знать, как вызвать эту функцию из main () и как записать прототип в мой заголовочный файл.

Заранее благодарен за любую помощь.

РЕДАКТИРОВАТЬ

Я даю вам эту тестовую программу.Этот не работает, и в основном даже нет вызова функции.Он просто не компилируется.

#include <stdio.h>
#include <stdlib.h>

void test(Card *card);

int main()
{
    struct Card {
        char *type;
        char *name;
    };

    typedef struct Card cards[2];
    cards card = {{"Hi", "Hi"}, {"Foo", "Foo"}};
    return 0;
}

void test(Card *card) {
    printf("%s", card[1].type);
}

Ответы [ 3 ]

6 голосов
/ 31 января 2012

Здесь:

void foo(struct Product *bla)
{
    bla[1].name = "Computer";
}

или используя псевдоним типа

void foo(products bla)
{
    bla[1].name = "Computer";
}

, затем вызовите функцию следующим образом:

foo(product); 
2 голосов
/ 31 января 2012

Поскольку у вас есть typedef (кстати, в вашем примере отсутствует ключевое слово struct), вы можете просто использовать этот тип в прототипе функции:

void func(products p);

Функция, выполняющая определенную операцию, о которой вы спрашивали, может быть:

void func(products p)
{
  p[1].name = "Computer";
}

Вы можете назвать это как:

func(product);

Из любой точки, где product находится в области видимости.

0 голосов
/ 31 января 2012
typedef struct tag_Product {
    int code;
    char *name;
    char *spec;
    int quantity;
    float price;
} PRODUCT;

PRODUCT products[8] = {
    {100, "Mouse", "Ottico", 10, 8.30},
    {101, "Tastiera", "Wireless", 6, 15.50},
    {102, "Monitor", "LCD", 3, 150.25},
    {103, "Webcam", "USB", 12, 12.00},
    {104, "Stampante", "A Inchiostro", 6, 100.00},
    {105, "Scanner", "Alta Risoluzione", 9, 70.50},
    {106, "Router", "300 Mbps", 10, 80.30},
    {107, "Lettore Mp3", "10 GB", 16, 100.00}
    };

void MyFunction(PRODUCT *pProduct)
{
   pProduct->code = 0; // sample
}

void main()
{
   MyFunction(&products[2]); // sample
}
...