简体   繁体   中英

Passing array of struct with typedef to a function

I need help with C programming. I have the following situation:

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}
    };

Please disregard the use of Italian language above.

I would like to pass the array of structs named "product" to a function. For example, if I wanted to do something like

product[1].name = "Computer"

But inside of a function, how am I supposed to do it? I would like to know how to call that function from the main() and how to write the prototype in my header file.

Thanks in advance for any help.

EDIT

I'm giving you this test program. This one ain't working and there is not even call to function in the main. It just doesn't compile.

#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);
}

Here:

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

or using your type alias

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

then call the function like this:

foo(product); 

Since you have the typedef (which is missing a struct keyword in your example, by the way), you can just use that type in the function prototype:

void func(products p);

A function performing the specific operation you asked about might be:

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

You can call it like:

func(product);

From anywhere where product is in scope.

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
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM