Solved

dynamic array

Posted on 2002-07-15
9
212 Views
Last Modified: 2012-05-04
How to create a dynamic array, with the array size is determine by user input?
Pls give a simple example.Thanx you.
0
Comment
Question by:exiang
  • 3
  • 2
  • 2
  • +2
9 Comments
 
LVL 84

Accepted Solution

by:
ozo earned 50 total points
ID: 7156178
#include <stdio.h>
main(){
    int arraysize;
    int *array;
    int i;
    scanf("%d",&arraysize);
    array = (int *)malloc(sizeof(*array)*arraysize);
    for( i=0; i<arraysize; i++ ){
          scanf("%d",&array[i]);
    }
    for( i=0; i<arraysize; i++ ){
          printf("%d\n",array[i]);
    }
}
0
 
LVL 3

Expert Comment

by:cincin77
ID: 7158967
int he malloc line;
instead of using sizeof(* array) you should use sizeof(int)
as the elements of the array are integers. However for this specifiz example, sizeof(* array) should be equal to 4 which is equal to sizeo(int) :))

regards...
0
 

Expert Comment

by:Theril
ID: 7159913
> instead of using sizeof(* array) you should use sizeof(int)
as the elements of the array are integers. However for this specifiz example, sizeof(* array) should be equal to 4 which is equal to sizeo(int) :))

No, *array points to an int, so the effect is exactly same as sizeof(int). You propably mixed it with sizeof(array)?
Using *array insteads of *int is propably wiser, as there may come situation where one changes the datatype of array.
0
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

 
LVL 3

Expert Comment

by:cincin77
ID: 7160328
array itself is a pointer and * array is a pointer to a pointer whose size is machine dependent.

do i miss something?
0
 

Expert Comment

by:Theril
ID: 7160963
> array itself is a pointer and * array is a pointer to a pointer whose size is machine dependent.

Maybe I said "*array points to an int" a bit wrong. What I ment was "*array is an int". Elements of int array are ints and *array is first element of the array (array[0]), so it's size is sizeof(int).

Try this one:

#include <stdio.h>
int main()
{
     char *foo = "foo";
     printf("Sizes: foo: %i *foo: %i\n", sizeof(foo), sizeof(*foo));
}
0
 
LVL 3

Expert Comment

by:cincin77
ID: 7161371
iygggg
what i said was really ridiculous, i wrote as if array is a type.
sorry for this mistake.

thanks theril...

0
 
LVL 2

Expert Comment

by:jonnin
ID: 7161859
note that you can resize the array with realloc; this is slow (do not add one element at a time, add 100 or 1000 or something each time you run out of space)

0
 

Author Comment

by:exiang
ID: 7170987
should include a header file called <alloc.h>
0
 
LVL 84

Expert Comment

by:ozo
ID: 7171022
<alloc.h> is not ANSI standard
should include a header file called <stdlib.h>
0

Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand how to create, access, and change arrays in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.

856 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question