944,131 Members | Top Members by Rank

Ad:
  • C Discussion Thread
  • Unsolved
  • Views: 3334
  • C RSS
Apr 1st, 2007
0

How to pass dynamic arrays?

Expand Post »
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:

  1. int main (void)
  2. {
  3. 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!
Similar Threads
Reputation Points: 10
Solved Threads: 0
Junior Poster in Training
shmay is offline Offline
55 posts
since Jul 2005
Apr 1st, 2007
0

Re: How to pass dynamic arrays?

pass the pointer and the length of the array.
Reputation Points: 683
Solved Threads: 53
Posting Virtuoso
Infarction is offline Offline
1,580 posts
since May 2006
Apr 1st, 2007
0

Re: How to pass dynamic arrays?

  1. int arr[10];
  2. int *pArr = malloc ( 10 * sizeof *pArr );
  3. myFunc( arr );
  4. 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.
Team Colleague
Reputation Points: 5862
Solved Threads: 950
Posting Sage
Salem is offline Offline
7,164 posts
since Dec 2005
Apr 3rd, 2007
0

Re: How to pass dynamic arrays?

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!
Reputation Points: 10
Solved Threads: 0
Junior Poster in Training
shmay is offline Offline
55 posts
since Jul 2005
Apr 3rd, 2007
0

Re: How to pass dynamic arrays?

>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.
Team Colleague
Reputation Points: 2240
Solved Threads: 338
Vampirical Lurker
John A is offline Offline
5,055 posts
since Apr 2006
Apr 3rd, 2007
0

Re: How to pass dynamic arrays?

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.

  1. {
  2. int *pArr, Size;
  3.  
  4. Size = /* Function call here*/
  5. myFunc( pArr, Size );
  6. }
  7.  
  8. /* Put function that returns size here*/
  9.  
  10. void myFunc(int dArr[], int Size)
  11. {
  12. dArr = malloc (sizeof (int) * Size);
  13. }

That's my shitty attempt at it. I have tried many other variations. Which is the correct way?
Last edited by shmay; Apr 3rd, 2007 at 9:29 pm.
Reputation Points: 10
Solved Threads: 0
Junior Poster in Training
shmay is offline Offline
55 posts
since Jul 2005
Apr 3rd, 2007
0

Re: How to pass dynamic arrays?

>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...)
Team Colleague
Reputation Points: 2240
Solved Threads: 338
Vampirical Lurker
John A is offline Offline
5,055 posts
since Apr 2006
Apr 4th, 2007
0

Re: How to pass dynamic arrays?

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...
Reputation Points: 9
Solved Threads: 7
Junior Poster
ft3ssgeek is offline Offline
124 posts
since Mar 2007

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C Forum Timeline: Error declaring class, pls help
Next Thread in C Forum Timeline: linked list problem!!!





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC