私はこの素晴らしいサイトを使い慣れていて、多くの場面で非常に便利だと分かっていましたが、今は解決できないような問題に取り組んでいます。 私は初心者Cの学生です。私は動的なメモリ割り当てを研究しています。 main関数ではなく、プロシージャ内で整数を割り当て、その中にメモリを割り当てる動的配列を作成したいと考えています。Cのプロシージャで動的配列を作成するにはどうすればよいですか?
これは動作します:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *numbers; // pointer to create a dynamic array
int *test; // pointer to test realloc function
int c;
size_t i = 0;
unsigned int dim; // array's length
// allocate memory for the 1st number
numbers = malloc(sizeof(*numbers));
if (numbers == NULL) {
fputs("Error while allocating memory!\n", stderr);
} else {
printf("Insert the 1 number: ");
scanf("%d", &numbers[0]);
++i;
/* allocate memory for the other numbers,
* until the user inputs EOF
*/
while (!feof(stdin)) {
test = realloc(numbers, (sizeof(*numbers) * (i + 1)));
if (test == NULL) {
fputs("Error while allocating memory!\n", stderr);
} else {
numbers = test;
printf("Insert the %u number: ", i + 1);
scanf("%d", &numbers[i]);
++i;
}
}
dim = --i;
// print the array, 5 numbers per line
for (i = 0; i < dim; ++i) {
if (i % 5 == 0) {
puts("");
}
printf("%d ", numbers[i]);
}
puts("");
}
getchar();
return 0;
}
をしかし、私は(動作しない)これをしたい:
#include <stdio.h>
#include <stdlib.h>
void get_numbers(int **numbers, unsigned int *dim);
int main()
{
int *numbers; // pointer to create a dynamic array
size_t i = 0;
unsigned int dim; // array's length
get_numbers(&numbers, &dim);
// print the array, 5 numbers per line
for (i = 0; i < dim; ++i) {
if (i % 5 == 0) {
puts("");
}
printf("%d ", numbers[i]);
}
puts("");
getchar();
return 0;
}
void get_numbers(int **numbers, unsigned int *dim)
{
int *test; // pointer to test realloc function
int c;
size_t i = 0;
// allocate memory for the 1st number
*numbers = malloc(sizeof(*numbers));
if (*numbers == NULL) {
fputs("Error while allocating memory!\n", stderr);
} else {
printf("Insert the 1 number: ");
scanf("%d", &numbers[0]); // Maybe the error is here
++i;
/* allocate memory for the other numbers,
* until the user inputs EOF
*/
while (!feof(stdin)) {
test = realloc(*numbers, (sizeof(*numbers) * (i + 1)));
if (test == NULL) {
fputs("Error while allocating memory!\n", stderr);
} else {
*numbers = test;
printf("Insert the %u number: ", i + 1);
scanf("%d", &numbers[i]);
++i;
}
}
*dim = --i;
}
}
は私が右、intへのポインタへのポインタを使用する必要がありますか? 私はいくつかの間違いをしましたが、私はそれらを修正する方法を理解できません。 あなたの返信をお寄せいただきありがとうございます! さようなら、コードの最初のブロックにおいて ファビオNardelli
'のscanf( "%d個"、&番号[I]);' - > 'のscanf( "%d個"、&(*番号) [size](* numbers) ' - > sizeof(** numbers)' – BLUEPIXY
@BLUEPIXY多くのありがとうございます!できます!!!! –
@BLUEPIXY構造体の配列がある場合はどうなりますか?たとえば、struct data * p; scanfは(* p)[i] .fieldですか? –