3

現時点では私はしようとしています

void avg(everything)

しかし、それは私にエラーを与えます:

error: subscripted value is neither array nor pointer

そして、今日このエラーが発生したのは、2D 配列を関数に適切に渡していなかったからです。これは同じだと思いますが、渡す正しい形式が見つかりません。

これは私のtypedefです:

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 に答える