私はこのスレッドで提案されたコードで動的配列を実装しようとしていますC dynamically growing array。私は関数からstruct Arrayを返すが、最初の行にはfoo()
( 'struct'の前にエラーが予想されるエラー)というエラーが出る。私はこれの他の多くの例を見てきましたが、解決策は適用されないようです。私の謝罪のひとつがそうであれば。ここに私の完全なコードは次のとおりです。Cで構造体の前にエラーが予想される式を扱う
typedef struct {
int *array;
size_t used;
size_t size;
} Array;
void initArray(Array *a, size_t initialSize) {
a->array = (int *)malloc(initialSize * sizeof(int));
a->used = 0;
a->size = initialSize;
}
void insertArray(Array *a, int element) {
// a->used is the number of used entries, because a->array[a->used++]
//updates a->used only *after* the array has been accessed.
// Therefore a->used can go up to a->size
if (a->used == a->size) {
a->size *= 2;
a->array = (int *)realloc(a->array, a->size * sizeof(int));
}
a->array[a->used++] = element;
}
void freeArray(Array *a) {
free(a->array);
a->array = NULL;
a->used = a->size = 0;
}
struct Array foo()
{
Array a;
int i;
initArray(&a, 5); // initially 5 elements
for (i = 0; i < 100; i++)
insertArray(&a, i); // automatically resizes as necessary
printf("%d\n", a.array[9]); // print 10th element
printf("%d\n", a.used); // print number of elements
freeArray(&a);
return struct Array a;
}
'typedef'は' Array'と言うだけで、常に 'struct Array'と言う必要がなくなります。 –
'struct Array foo()' ==> '配列foo()'は存在しません。同様に、 'return struct Array a;' ==> 'return a;'と同様ですが、もっと悪いことに、単に自由なエンティティを返すように見えますか? –
私は、 'c'がどのようにstructsを扱い、' C++ 'がそれをどう扱うのかに違いがあると付け加えたいと思います。 'C++ 'では、' struct tag_name'と 'tag_name'を同じ意味で使用できますが、' c'で行うことはできませんので、オンラインで見つかるかもしれないコードサンプルに注意してください。 – m0h4mm4d