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?
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
- 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
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
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*/