簡體   English   中英

將帶有typedef的struct數組傳遞給函數

[英]Passing array of struct with typedef to a function

我需要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);
}

這里:

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

或使用您的類型別名

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

然后像這樣調用函數:

foo(product); 

由於你有typedef(在你的例子中缺少一個struct關鍵字,順便說一句),你可以在函數原型中使用該類型:

void func(products p);

執行您詢問的特定操作的函數可能是:

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

你可以這樣稱呼它:

func(product);

product在范圍內的任何地方。

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM