wiredmark
wiredmark

Reputation: 1108

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

Upvotes: 7

Views: 8011

Answers (3)

ouah
ouah

Reputation: 145839

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

Upvotes: 7

BitBank
BitBank

Reputation: 8715

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
}

Upvotes: 0

Carl Norum
Carl Norum

Reputation: 224944

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.

Upvotes: 2

Related Questions