Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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);
}
like image 654
wiredmark Avatar asked Jan 31 '12 18:01

wiredmark


2 Answers

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); 
like image 130
ouah Avatar answered Nov 15 '22 09:11

ouah


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.

like image 34
Carl Norum Avatar answered Nov 15 '22 08:11

Carl Norum