3

目前我正在尝试

void avg(everything)

但这给了我错误:

error: subscripted value is neither array nor pointer

今天早些时候我收到这个错误是因为我没有正确地将二维数组传递给函数。所以我认为这是相同的,但我找不到正确的格式来传递它。

这是我的类型定义:

typedef struct structure
{
char names[13][9];
int scores[13][4];
float average[13];
char letter[13];
} stuff;

这是我的 typedef 数组:

stuff everything[13];
4

2 回答 2

5

在函数签名中,您需要指定类型,而不是要传入的变量的特定名称。此外,如果要传递数组,则需要传递指针(您可能应该通过指针传递结构无论如何,否则每次调用该函数时都会制作数据副本)。因此,您的功能应如下所示:

void avg(stuff* s);

但是,C 数组也没有长度的概念。因此,您应该始终将数组的长度传递给函数:

void avg(stuff* s, size_t len);

然后你可以这样称呼它:

avg(everything, 13);

此外,如果函数不以任何方式修改数据,则应通过指定参数来表示const

void avg(const stuff* s, size_t len);
于 2013-04-23T02:13:49.363 回答
3

引入的类型typedef是可用于真实类型的别名。

例如:

typedef struct some_struct { ... } some_type_name;

现在您可以使用some_type_name 不是struct some_struct.

因此,当声明一个采用这种“类型”结构的函数时,您可以像使用任何其他类型一样使用该类型:

void some_function(some_type_name var) { ... }

some_function如上所述,您可以var像使用普通结构变量一样使用。

要定义一个将数组(或指针)指向此类型的函数,同样简单:

void some_function(some_type_name *pointer) { ... }
于 2013-04-23T02:12:45.890 回答