在c中创建我自己的数组:

时间:2015-03-18 05:28:56

标签: c

我是C的初学者。我想创建一个数组,其大小将取自scanf函数的用户,因为数组可能具有任何在程序启动时都不知道的大小。

我怎样才能输入数组元素:

我希望我的程序输出为:

请输入数组元素的数量:4 输入元素:12 43 5 6 您输入的元素是:12 43 5 6

有可能这样做吗?我该如何制作这样的输出?

3 个答案:

答案 0 :(得分:4)

是的,这是非常可能的。它被称为动态内存分配。 你要做的是创建一个指针,然后分配它 后来。

int *array;
int num_elements;
//Get number of elements here
array = (int *)malloc(sizeof(int) * num_elements);
if(!array){ //Good practice to check if the allocation worked
    printf("Allocating %d bytes failed\n", (int)sizeof(int) * num_elements);
    return -1;
}
//Use the array are normal
free(array); // don't forget to free allocated memory

指针访问就像静态数组一样,即数组[0] =无论

编辑:

不要忘记在使用malloc()

时应该包含stdlib.h

答案 1 :(得分:3)

动态内存很适合您的目的,但正如前面提到的Gopi,C99允许您直接使用堆栈。

这是使用堆栈而不是堆内存的另一种解决方案:

    #include <stdio.h>

    int     main(void)
    {
      int   nb;

      scanf("%d", &nb);
      printf("%d\n", nb);
      // declaration
      char  my_tab[nb];
      if  (nb > 2)
        {
          // I use my table as I want...
          my_tab[0] = 'a';
          my_tab[1] = 0;
          printf("%s\n", my_tab);
        }
      return (0);
    }

我希望这会帮助你更好地理解不同类型的内存分配。

答案 2 :(得分:0)

使用基本知识执行此操作的简单方法可能是将用户输入设置为变量,然后在描述数组大小时使用它:

#include <stdio.h>

int main(void)
{
    int arraysize, i;

    printf("Please input an array size.\n");
    scanf("%d", &arraysize); //Will set the user input and use it as array size
    getchar(); //Has user hit enter to continue
    i = arraysize; //This is for sheer convenience in the for() loop
    int array[i]; //This creates an array of the size inputted by the user
    printf("Please input %d numbers to fill the array.\n", i); 
    for(i = 0; i<arraysize; i++) //Has the user put in a number for every space in the array
    {
         scanf("%d", &array[i]); //The i coordinate updates with the i++
         getchar();

    }
    printf("Your numbers were: \n");
    for(i = 0; i<arraysize; i++) //Same thing as the previous for() loop
    {                            //except we are printing the numbers in the table
         printf("| %d |", array[i]);

    }
}

输出如下:

[PROGRAM BEGINS]
Please input an array size.
5
Please input 5 numbers to fill the array.
1 2 33 4 5
Your numbers were:
| 1 || 2 || 33 || 4 || 5 |
[PROGRAM ENDS]

希望有所帮助!