How to declare a dynamic integer array in ANSI - C using malloc and put input integers into it?

℡╲_俬逩灬. 提交于 2019-12-08 05:45:41

问题


First I want the user to input what is the size of the desired array. So I am using:

int size;
scanf("&d",&size);

Now I want to create an integer array using a pointer and the malloc function. This is what I did:

int *p1 = (int*)malloc(sizeof(int)*size);

According to my understanding, this is like using:

int p1[size];

But how do I use it like an array?

Question 1: Now I want the user to input as many integers as he wrote into this "array". But I can't use p[0] because it is not an array, it is a pointer.

Question 2: I want to "send" this array to a function that gets an array of integers. So again, this is not an array, how can I "give" it to the function?


回答1:


Answer to first question:

for(i = 0; i < size; i++ )
{
   scanf("%d",&p[i]); 
   /*p[i] is the content of element at index i and &p[i] is the address of element 
at index i */
}

Or

for(i = 0; i < size; i++ )
{
   scanf("%d",(p+i)); //here p+i is the address of element at index i
}

Answer to second question:

For sending this array to the function, just call the function like this:

function(p); //this is sending the address of first index of p

void function( int *p ) //prototype of the function



回答2:


  • Question 1: 1d arrays and pointers to properly allocated memory are pretty-much the same thing.
  • Question 2: When passing an array to a method you are actually passing the address of the 1st element of that array

An array is actually a pointer to the first element of the array




回答3:


You can use the subscript-syntax to access an element of your pointer.

p1[3] = 5; // assign 5 to the 4th element

But, this syntax is actually converted into the following

*(p1+3) = 5; // pointer-syntax

For your second question, define a function and pass a pointer

int* getarray(int* p1, size_t arraysize){ } //define the function

int* values = getarray(p1, size); // use the function



回答4:


sorry for bothering everyone but Miss Upasana was right this is the correct method for dynamic array use. After declaring ur array through malloc u can directly use it exactly as array as follows::

       for(int i = 0; i < size; i++ )
    {
       scanf("%d",p+i); 
       /*p+i denoting address of memory allocated by malloc */
    }

Second Answer: Now simply pass this address to any function use address to find values like:

function(int *p)
/* access as &p for first value &p+2 for second p+4 for third and so on*/


来源:https://stackoverflow.com/questions/16035952/how-to-declare-a-dynamic-integer-array-in-ansi-c-using-malloc-and-put-input-in

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!