954,505 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

How to pass dynamic arrays?

For my C class, I have to write a program where the user enters how many fahrenheits he will be entering, but the fahrenheits have to be in an array. So a dynamic array seems the obvious choice. In main, we can only have initializations and function calls.

For example, if i have:

int main (void)
{
     int *dynArray;


How would I pass the dynamic array to another function? Do I have to use malloc in only the first function that I call it to? Help!

shmay
Junior Poster in Training
55 posts since Jul 2005
Reputation Points: 10
Solved Threads: 0
 

pass the pointer and the length of the array.

Infarction
Posting Virtuoso
1,580 posts since May 2006
Reputation Points: 683
Solved Threads: 53
 
int arr[10];
int *pArr = malloc ( 10 * sizeof *pArr );
myFunc( arr );
myFunc( pArr );

The function itself doesn't care whether you have a real array or a pointer to allocated memory, the function is declared and written in exactly the same way.

Salem
Posting Sage
Team Colleague
11,531 posts since Dec 2005
Reputation Points: 5,862
Solved Threads: 953
 

I understand that, but the user has to enter the size of the array, and in a different function than main.

Also, what would the receiving functions look like in your example? Thanks!

shmay
Junior Poster in Training
55 posts since Jul 2005
Reputation Points: 10
Solved Threads: 0
 

>I understand that, but the user has to enter the size of the array, and in a different function than main.
Then use a pointer to modify the memory in the variables in main(). Or if you can, return the value that the user entered in the function.

>Also, what would the receiving functions look like in your example?
They'd look exactly the same as if they had been written for static arrays. One thing you have to remember though, is to always pass the size of the dynamic array to the function (even though it's not a requirement), because otherwise you run the risk of overrunning the array boundaries.

John A
Vampirical Lurker
Team Colleague
7,630 posts since Apr 2006
Reputation Points: 2,240
Solved Threads: 339
 

Ah, I see. Thanks. I'm still left with one problem I can't solve though: how to have the user decide the size of the array through another function.

{
int *pArr, Size;

Size = /* Function call here*/
myFunc( pArr, Size );
}

/* Put function that returns size here*/

void myFunc(int dArr[], int Size)
{
      dArr = malloc (sizeof (int) * Size);
}


That's my shitty attempt at it. I have tried many other variations. Which is the correct way?

shmay
Junior Poster in Training
55 posts since Jul 2005
Reputation Points: 10
Solved Threads: 0
 

>how to have the user decide the size of the array through another function.
What's so hard about that? Just get the user to input a number, and return that value back. (although you might want to validate the number first, so as to avoid negative array sizes...)

John A
Vampirical Lurker
Team Colleague
7,630 posts since Apr 2006
Reputation Points: 2,240
Solved Threads: 339
 

You don't even necessarily have to have the user choose the size of the array...
you could let the program change the size of the array on the fly...ie. if the user enters another value that is beyond the size of the current array, the program could double the size variable, create a new array with that size, copy the old values from the old array, add the new value entered by the user, then reassign the new array to the variable of the old array...it sounds complicated, but it's not too bad...

ft3ssgeek
Junior Poster
126 posts since Mar 2007
Reputation Points: 9
Solved Threads: 7
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You