array of struct?

say I have:





and I want to create an array of TreeNode, how do I do that?
typedef struct treeNode   
   { ..................
     .......................
   } TreeNode;

Open in new window

kuntilanakAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Jaime OlivaresSoftware ArchitectCommented:
Declare a pointer:
TreeNode *nodes;

Then you can create the array dynamically:

nodes = new TreeNode[somesize];

but these will be unsual since a tree is not used to be stored in an array, but in some kind of dynamically collection.
0
kuntilanakAuthor Commented:
I don't think that C has a new operation, what if I do:

TreeNode * arr[100];

will that work?
0
Jaime OlivaresSoftware ArchitectCommented:
>>I don't think that C has a new operation
You put your question in the C and C++ areas

>>what if I do:
>>TreeNode * arr[100];
You just need:
TreeNode arr[100];

0
Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

kuntilanakAuthor Commented:
okay, so TreeNode arr[100];

will also work for me?
0
Jaime OlivaresSoftware ArchitectCommented:
yes, it will.
0
kuntilanakAuthor Commented:
someone recommend me to use malloc, how can I do that?
0
Jaime OlivaresSoftware ArchitectCommented:
if you need a fixed set of object, you can work as described.
if you don't know the number of elements at design time, then malloc will help you better, as the 'new' operator does in C++. Something like:

TreeNode *arr = (TreeNode *)malloc(sizeof(TreeNode) * num_elements);

where you have to define num_elements.
But notice you are responsible to free that memory somewhere with the free() function, like:

free(arr);
0
kuntilanakAuthor Commented:
Why is it not TreeNode * arr[100]; instead of TreeNode arr[100];??
0
kuntilanakAuthor Commented:
and say I want to create a function to traverse the array in order to find a specific value, will this work
static TreeNode * traverseArray(TreeNode * array[], TreeNode * t){
for (int i = 0; i<100; i++){
  if (strcmp(array[1]->name, t->name) == 0)
	return t;
}
return NULL;
}

Open in new window

0
Infinity08Commented:
>> Why is it not TreeNode * arr[100]; instead of TreeNode arr[100];??

Because then it would be an array of pointers to TreeNode, not an array of TreeNode's as you wanted :)

You can do that of course, but you'd need to modify the rest of the code to work with that.


>> and say I want to create a function to traverse the array in order to find a specific value, will this work

The idea is good, but there's a few mistakes :
TreeNode *traverseArray(TreeNode *array[], TreeNode *t) {
  int i = 0;
  for (i = 0; i < 100; i++) {                                      /* <--- will the array always have size 100 ? */
    if (strcmp(array[i]->name, t->name) == 0) {                    /* <--- use i as index ! */
      return array[i];                                             /* <--- return the element from the array */
    }
  }
  return NULL;
}

Open in new window

0
Infinity08Commented:
Didn't jaime_olivares answer your question ? I merely answered a follow-up question. You need to take care in accepting the right answers. Not only in order not to offend the experts who took their time to help you, but also to have a usable PAQ database.
0
Jaime OlivaresSoftware ArchitectCommented:
I think a split woud be a fair decision.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Infinity08Commented:
kuntilanak : the reply you accepted does not answer your initial question. You need to make some effort to identify the reply (replies) that answered your question, and accept those. Otherwise, it'll be more difficult for other people to find the answer.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.