大概您希望以后能够访问这些数组。
事实上,当您 malloc 下一个数组时,您会丢失指向前一个数组的指针(当然,如果它是一个更大的应用程序,则会导致内存泄漏)。
您需要分配一个 int *(一组 int 指针),然后将每个 int 指针存储在那里。
诀窍是...如果您不知道需要多少数组,则需要动态代码(例如;分配一些空间,然后在用完时分配更多空间) .
另一个选项是您可以限制用户可以输入的系列数量,并在他们到达时告诉他们他们已经完成了。
如果您想走后一条路线,这里有一些帮助:
int i;
int n = 1;
int **myArrayOfArrays = malloc(sizeof(int*) * 5); /* max of 5 arrays */
int *arr;
int arrayCount = 0;
while(n != 0) {
scanf("%d", &n);
if(n == 0)
break;
else {
if (arrayCount == 4) {
printf("Woah there partner! That's enough!\n");
break;
}
else
{
arr = malloc(sizeof(int) * n);
for(i = 0; i < n; i++)
scanf("%d", &arr[i]);
myArrayOfArrays[arrayCount] = arr;
arrayCount++;
}
} //end if
} //end while
但是...现在您不知道每个数组有多长。这是一个问题。您需要跟踪它,或使用动态结构,例如链表。在下面的示例中,我们将长度添加为每个数组的第一个元素:
int main()
{
int i;
int n = 1;
int **myArrayOfArrays = malloc(sizeof(int*) * 5);
int *arr;
int arrayCount = 0;
while(n != 0) {
scanf("%d", &n);
if(n == 0)
break;
else {
if (arrayCount == 4) {
printf("Woah there partner! That's enough!\n");
break;
}
else
{
arr = malloc(sizeof(int) * (n + 1)); /* one more than we need */
arr[0] = n; /* store the array length in the first element */
for(i = 1; i <= n; i++)
scanf("%d", &arr[i]);
myArrayOfArrays[arrayCount] = arr;
arrayCount++;
}
} //end if
} //end while
int j;
for (i = 0; i < arrayCount; i++)
{
int length = myArrayOfArrays[i][0]; /* retrieve the length */
for (j = 1; j <= length; j++)
printf("%d ", myArrayOfArrays[i][j]);
printf("\n");
}
}
使用数组/原始内存进行动态分配意味着您需要跟踪内容。更好的方法实际上是为您的数据使用链表。在这种情况下,您可以有一个节点链表,每个节点都包含一个整数链表。