2012-01-31 72 views
6

我需要C编程方面的帮助。我有以下情况:将typedef结构数组传递给函数

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

回答

6

这里:

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

或使用类型别名

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

然后调用这样的功能:

foo(product); 
+0

你已经编辑了主帖,你能检查我的语法有什么问题吗? – wiredmark 2012-02-01 11:20:28

+0

@MarcelloSilvestri in'void test(Card * card)':程序中没有名为'Card'的类型。有一个名为'struct Card'的类型和一个名为'cards'的类型,但没有'Card'。 – ouah 2012-02-01 11:44:37

2

既然你的类型定义(这是缺少在例如struct关键字的方式),你可以使用函数原型类型:

void func(products p); 

的函数执行你问具体的操作有关可能是:

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

你可以把它想:

func(product); 

product范围内的任何地方。

+0

您好,感谢您的回答。我得到以下错误: 错误:预计')'之前'p' 在我的原型。 – wiredmark 2012-01-31 18:07:29

+0

产品是在原型之前申报的吗?类型定义需要适用于该原型才有意义。 – 2012-01-31 19:12:30

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