我是这个很棒的网站的新手,我发现它在很多场合都非常有用,但现在我正在处理一个我似乎无法解决的问题。 我是初学者 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 的指针,对吗? 我知道我犯了一些错误,但我不知道如何解决它们。 提前感谢您的回复! 再见, 法比奥·纳德利
最佳答案
在第一个代码块中,numbers
的类型是int*
。
在第二个代码块中,numbers
的类型为 int**
。
您还没有修复所有因该更改而需要修复的地方。
我的建议:
- 将输入参数更改为
numbersPtr
。 - 创建一个局部变量
int* numbers
。 - 在从函数返回之前,将
*numbersPtr
设置为number
。
void get_numbers(int **numbersPtr, unsigned int *dim)
{
int* numbers;
...
*numbersPtr = numbers;
}
最好将 get_numbers
更改为返回 numbers
。
int* get_numbers(unsigned int *dim)
{
int* numbers;
...
return numbers;
}
并将其用法更改为:
numbers = get_numbers(&dim);
关于c - 如何在 C 的过程中创建动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37173561/