How do you make an array of structs in C? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Data science time! April 2019 and salary with experience Should we burninate the [wrap] tag? The Ask Question Wizard is Live!an array of people using structs in c?C - initialize array of structsArray of structs in CSetting a struct to an array in an AVRFunction pointer in struct args?have a loop to create structsC Replacing Variable NumberArray of struct implementation in CReturn two values with pop function from priority queueHow to print specific data in c?Create ArrayList from arrayHow do I check if an array includes an object in JavaScript?How to append something to an array?How to insert an item into an array at a specific index (JavaScript)?How do you check if a variable is an array in JavaScript?How do I empty an array in JavaScript?Loop through an array in JavaScriptHow to check if an object is an array?How do I remove a particular element from an array in JavaScript?For-each over an array in JavaScript?
Antler Helmet: Can it work?
How much radiation do nuclear physics experiments expose researchers to nowadays?
Do you forfeit tax refunds/credits if you aren't required to and don't file by April 15?
Did Kevin spill real chili?
Should I call the interviewer directly, if HR aren't responding?
Were Kohanim forbidden from serving in King David's army?
If a contract sometimes uses the wrong name, is it still valid?
What are the pros and cons of Aerospike nosecones?
Letter Boxed validator
What is the longest distance a 13th-level monk can jump while attacking on the same turn?
Why does Python start at index -1 when indexing a list from the end?
Why constant symbols in a language?
Is the address of a local variable a constexpr?
What do you call a plan that's an alternative plan in case your initial plan fails?
Why did the IBM 650 use bi-quinary?
What are the motives behind Cersei's orders given to Bronn?
Is there a documented rationale why the House Ways and Means chairman can demand tax info?
Why is "Consequences inflicted." not a sentence?
Stars Make Stars
How to motivate offshore teams and trust them to deliver?
Why was the term "discrete" used in discrete logarithm?
iPhone Wallpaper?
Determinant is linear as a function of each of the rows of the matrix.
Sorting numerically
How do you make an array of structs in C?
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
Data science time! April 2019 and salary with experience
Should we burninate the [wrap] tag?
The Ask Question Wizard is Live!an array of people using structs in c?C - initialize array of structsArray of structs in CSetting a struct to an array in an AVRFunction pointer in struct args?have a loop to create structsC Replacing Variable NumberArray of struct implementation in CReturn two values with pop function from priority queueHow to print specific data in c?Create ArrayList from arrayHow do I check if an array includes an object in JavaScript?How to append something to an array?How to insert an item into an array at a specific index (JavaScript)?How do you check if a variable is an array in JavaScript?How do I empty an array in JavaScript?Loop through an array in JavaScriptHow to check if an object is an array?How do I remove a particular element from an array in JavaScript?For-each over an array in JavaScript?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I'm trying to make an array of structs where each struct represents a celestial body.
I don't have that much experience with structs, which is why I decided to try to use them instead of a whole bunch of arrays. However, I keep on running into numerous different errors. I've tried to implement the techniques that I've seen on various threads and on StackOverflow (such as Array of structs in C and C - initialize array of structs), however not all of them were applicable.
Further information for those who have read this far: I don't need any of this to be dynamic, I know/define the size of everything beforehand. I also need this to be a global array as I'm accessing this in several different methods which have defined arguments (i.e. GLUT methods).
This is how I'm defining the struct in my header:
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
I have a list of other global variables that I'm defining before I define the interior of the struct, and one of those is the array of this struct (basically, if I'm being too unclear in my fogged speak, the line below is above the stuff above):
struct body bodies[n];
Just so you know, n
is something that I've legitimately defined (i.e. #define n 1
).
I use this array in several different methods, but the easiest and least space consuming one is a simplified form of my main. Here I initialize all of the variables in each of the structs, just to set the variables for certain before I modify them in some way:
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
The current error that I'm facing is nbody.c:32:13: error: array type has incomplete element type
where line 32 is where I'm making the array of the structs.
One last clarification, by header I mean the space above int main(void)
but in the same *.c
file.
c arrays struct
add a comment |
I'm trying to make an array of structs where each struct represents a celestial body.
I don't have that much experience with structs, which is why I decided to try to use them instead of a whole bunch of arrays. However, I keep on running into numerous different errors. I've tried to implement the techniques that I've seen on various threads and on StackOverflow (such as Array of structs in C and C - initialize array of structs), however not all of them were applicable.
Further information for those who have read this far: I don't need any of this to be dynamic, I know/define the size of everything beforehand. I also need this to be a global array as I'm accessing this in several different methods which have defined arguments (i.e. GLUT methods).
This is how I'm defining the struct in my header:
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
I have a list of other global variables that I'm defining before I define the interior of the struct, and one of those is the array of this struct (basically, if I'm being too unclear in my fogged speak, the line below is above the stuff above):
struct body bodies[n];
Just so you know, n
is something that I've legitimately defined (i.e. #define n 1
).
I use this array in several different methods, but the easiest and least space consuming one is a simplified form of my main. Here I initialize all of the variables in each of the structs, just to set the variables for certain before I modify them in some way:
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
The current error that I'm facing is nbody.c:32:13: error: array type has incomplete element type
where line 32 is where I'm making the array of the structs.
One last clarification, by header I mean the space above int main(void)
but in the same *.c
file.
c arrays struct
Well, it works fine for me. Aren't you declaringstruct body bodies[n];
beforestruct body
declaration?
– Jack
May 6 '12 at 4:50
add a comment |
I'm trying to make an array of structs where each struct represents a celestial body.
I don't have that much experience with structs, which is why I decided to try to use them instead of a whole bunch of arrays. However, I keep on running into numerous different errors. I've tried to implement the techniques that I've seen on various threads and on StackOverflow (such as Array of structs in C and C - initialize array of structs), however not all of them were applicable.
Further information for those who have read this far: I don't need any of this to be dynamic, I know/define the size of everything beforehand. I also need this to be a global array as I'm accessing this in several different methods which have defined arguments (i.e. GLUT methods).
This is how I'm defining the struct in my header:
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
I have a list of other global variables that I'm defining before I define the interior of the struct, and one of those is the array of this struct (basically, if I'm being too unclear in my fogged speak, the line below is above the stuff above):
struct body bodies[n];
Just so you know, n
is something that I've legitimately defined (i.e. #define n 1
).
I use this array in several different methods, but the easiest and least space consuming one is a simplified form of my main. Here I initialize all of the variables in each of the structs, just to set the variables for certain before I modify them in some way:
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
The current error that I'm facing is nbody.c:32:13: error: array type has incomplete element type
where line 32 is where I'm making the array of the structs.
One last clarification, by header I mean the space above int main(void)
but in the same *.c
file.
c arrays struct
I'm trying to make an array of structs where each struct represents a celestial body.
I don't have that much experience with structs, which is why I decided to try to use them instead of a whole bunch of arrays. However, I keep on running into numerous different errors. I've tried to implement the techniques that I've seen on various threads and on StackOverflow (such as Array of structs in C and C - initialize array of structs), however not all of them were applicable.
Further information for those who have read this far: I don't need any of this to be dynamic, I know/define the size of everything beforehand. I also need this to be a global array as I'm accessing this in several different methods which have defined arguments (i.e. GLUT methods).
This is how I'm defining the struct in my header:
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
I have a list of other global variables that I'm defining before I define the interior of the struct, and one of those is the array of this struct (basically, if I'm being too unclear in my fogged speak, the line below is above the stuff above):
struct body bodies[n];
Just so you know, n
is something that I've legitimately defined (i.e. #define n 1
).
I use this array in several different methods, but the easiest and least space consuming one is a simplified form of my main. Here I initialize all of the variables in each of the structs, just to set the variables for certain before I modify them in some way:
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
The current error that I'm facing is nbody.c:32:13: error: array type has incomplete element type
where line 32 is where I'm making the array of the structs.
One last clarification, by header I mean the space above int main(void)
but in the same *.c
file.
c arrays struct
c arrays struct
edited Mar 8 at 16:34
Seanny123
2,70443870
2,70443870
asked May 6 '12 at 4:35
Amndeep7Amndeep7
85431123
85431123
Well, it works fine for me. Aren't you declaringstruct body bodies[n];
beforestruct body
declaration?
– Jack
May 6 '12 at 4:50
add a comment |
Well, it works fine for me. Aren't you declaringstruct body bodies[n];
beforestruct body
declaration?
– Jack
May 6 '12 at 4:50
Well, it works fine for me. Aren't you declaring
struct body bodies[n];
before struct body
declaration?– Jack
May 6 '12 at 4:50
Well, it works fine for me. Aren't you declaring
struct body bodies[n];
before struct body
declaration?– Jack
May 6 '12 at 4:50
add a comment |
7 Answers
7
active
oldest
votes
#include<stdio.h>
#define n 3
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
struct body bodies[n];
int main()
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
return 0;
this works fine. your question was not very clear by the way, so match the layout of your source code with the above.
Also, I have a question about the placement between the declaration of the struct type and then actually making an instance of it - I have a different struct, one that I defined the contents of below where I first make an instance of it (just one this time, not an array), so why didn't this make the massive series of errors? It worked just fine, which led me to think that my attempt at making an array should have worked as well, but this time it didn't work. Also, thank you for your answer, it worked.
– Amndeep7
May 6 '12 at 15:07
Thanks!!!, this really help me!
– FlokiTheFisherman
Jul 24 '16 at 0:53
1
Hi, .... 59 likes ? I didn't see arrays of struct, I only see arrays of variable from struck...
– delive
Mar 15 '17 at 23:10
add a comment |
I think you could write it that way too. I am also a student so I understand your struggle. A bit late response but ok .
#include<stdio.h>
#define n 3
struct
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
bodies[n];
add a comment |
move
struct body bodies[n];
to after
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
Rest all looks fine.
add a comment |
So to put it all together by using malloc()
:
int main(int argc, char** argv)
typedef struct
char* firstName;
char* lastName;
int day;
int month;
int year;
STUDENT;
int numStudents=3;
int x;
STUDENT* students = malloc(numStudents * sizeof *students);
for (x = 0; x < numStudents; x++)
students[x].firstName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].firstName);
students[x].lastName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].lastName);
scanf("%d",&students[x].day);
scanf("%d",&students[x].month);
scanf("%d",&students[x].year);
for (x = 0; x < numStudents; x++)
printf("first name: %s, surname: %s, day: %d, month: %d, year: %dn",students[x].firstName,students[x].lastName,students[x].day,students[x].month,students[x].year);
return (EXIT_SUCCESS);
7
Should your malloc line have numStudents * sizeof(STUDENT)?
– Todd
Jul 24 '14 at 16:57
@Todd It's better not to.sizeof *students
is the same thing and it won't be wrong if STUDENT ever happens to change.
– trentcl
Mar 11 '16 at 18:18
add a comment |
That error means that the compiler is not able to find the definition of the type of your struct before the declaration of the array of structs, since you're saying you have the definition of the struct in a header file and the error is in nbody.c
then you should check if you're including correctly the header file.
Check your #include
's and make sure the definition of the struct is done before declaring any variable of that type.
i doubt OP means header as header file, as he wrote, "the line below is above the stuff above" before the struct array declaration which is in his nbody.c file. Lets wait for him to wake up and clear the doubt.
– nims
May 6 '12 at 4:52
@nims is correct, by header I meant the area above themain
statement.
– Amndeep7
May 6 '12 at 14:39
add a comment |
Solution using pointers:
#include<stdio.h>
#include<stdlib.h>
#define n 3
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double *mass;
;
int main()
struct body *bodies = (struct body*)malloc(n*sizeof(struct body));
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
return 0;
add a comment |
Another way of initializing an array of structs is to initialize the array members explicitly. This approach is useful and simple if there aren't too many struct and array members.
Use the typedef
specifier to avoid re-using the struct
statement everytime you declare a struct variable:
typedef struct
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
Body;
Then declare your array of structs. Initialization of each element goes along with the declaration:
Body bodies[n] = 0,0,0, 0,0,0, 0,0,0, 0, 1.0,
0,0,0, 0,0,0, 0,0,0, 0, 1.0,
0,0,0, 0,0,0, 0,0,0, 0, 1.0;
To repeat, this is a rather simple and straightforward solution if you don't have too many array elements and large struct members and if you, as you stated, are not interested in a more dynamic approach. This approach can also be useful if the struct members are initialized with named enum-variables (and not just numbers like the example above) whereby it gives the code-reader a better overview of the purpose and function of a structure and its members in certain applications.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f10468128%2fhow-do-you-make-an-array-of-structs-in-c%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
7 Answers
7
active
oldest
votes
7 Answers
7
active
oldest
votes
active
oldest
votes
active
oldest
votes
#include<stdio.h>
#define n 3
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
struct body bodies[n];
int main()
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
return 0;
this works fine. your question was not very clear by the way, so match the layout of your source code with the above.
Also, I have a question about the placement between the declaration of the struct type and then actually making an instance of it - I have a different struct, one that I defined the contents of below where I first make an instance of it (just one this time, not an array), so why didn't this make the massive series of errors? It worked just fine, which led me to think that my attempt at making an array should have worked as well, but this time it didn't work. Also, thank you for your answer, it worked.
– Amndeep7
May 6 '12 at 15:07
Thanks!!!, this really help me!
– FlokiTheFisherman
Jul 24 '16 at 0:53
1
Hi, .... 59 likes ? I didn't see arrays of struct, I only see arrays of variable from struck...
– delive
Mar 15 '17 at 23:10
add a comment |
#include<stdio.h>
#define n 3
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
struct body bodies[n];
int main()
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
return 0;
this works fine. your question was not very clear by the way, so match the layout of your source code with the above.
Also, I have a question about the placement between the declaration of the struct type and then actually making an instance of it - I have a different struct, one that I defined the contents of below where I first make an instance of it (just one this time, not an array), so why didn't this make the massive series of errors? It worked just fine, which led me to think that my attempt at making an array should have worked as well, but this time it didn't work. Also, thank you for your answer, it worked.
– Amndeep7
May 6 '12 at 15:07
Thanks!!!, this really help me!
– FlokiTheFisherman
Jul 24 '16 at 0:53
1
Hi, .... 59 likes ? I didn't see arrays of struct, I only see arrays of variable from struck...
– delive
Mar 15 '17 at 23:10
add a comment |
#include<stdio.h>
#define n 3
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
struct body bodies[n];
int main()
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
return 0;
this works fine. your question was not very clear by the way, so match the layout of your source code with the above.
#include<stdio.h>
#define n 3
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
struct body bodies[n];
int main()
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
return 0;
this works fine. your question was not very clear by the way, so match the layout of your source code with the above.
edited Mar 13 '17 at 22:15
Adam Matthew
365
365
answered May 6 '12 at 4:47
nimsnims
2,6441926
2,6441926
Also, I have a question about the placement between the declaration of the struct type and then actually making an instance of it - I have a different struct, one that I defined the contents of below where I first make an instance of it (just one this time, not an array), so why didn't this make the massive series of errors? It worked just fine, which led me to think that my attempt at making an array should have worked as well, but this time it didn't work. Also, thank you for your answer, it worked.
– Amndeep7
May 6 '12 at 15:07
Thanks!!!, this really help me!
– FlokiTheFisherman
Jul 24 '16 at 0:53
1
Hi, .... 59 likes ? I didn't see arrays of struct, I only see arrays of variable from struck...
– delive
Mar 15 '17 at 23:10
add a comment |
Also, I have a question about the placement between the declaration of the struct type and then actually making an instance of it - I have a different struct, one that I defined the contents of below where I first make an instance of it (just one this time, not an array), so why didn't this make the massive series of errors? It worked just fine, which led me to think that my attempt at making an array should have worked as well, but this time it didn't work. Also, thank you for your answer, it worked.
– Amndeep7
May 6 '12 at 15:07
Thanks!!!, this really help me!
– FlokiTheFisherman
Jul 24 '16 at 0:53
1
Hi, .... 59 likes ? I didn't see arrays of struct, I only see arrays of variable from struck...
– delive
Mar 15 '17 at 23:10
Also, I have a question about the placement between the declaration of the struct type and then actually making an instance of it - I have a different struct, one that I defined the contents of below where I first make an instance of it (just one this time, not an array), so why didn't this make the massive series of errors? It worked just fine, which led me to think that my attempt at making an array should have worked as well, but this time it didn't work. Also, thank you for your answer, it worked.
– Amndeep7
May 6 '12 at 15:07
Also, I have a question about the placement between the declaration of the struct type and then actually making an instance of it - I have a different struct, one that I defined the contents of below where I first make an instance of it (just one this time, not an array), so why didn't this make the massive series of errors? It worked just fine, which led me to think that my attempt at making an array should have worked as well, but this time it didn't work. Also, thank you for your answer, it worked.
– Amndeep7
May 6 '12 at 15:07
Thanks!!!, this really help me!
– FlokiTheFisherman
Jul 24 '16 at 0:53
Thanks!!!, this really help me!
– FlokiTheFisherman
Jul 24 '16 at 0:53
1
1
Hi, .... 59 likes ? I didn't see arrays of struct, I only see arrays of variable from struck...
– delive
Mar 15 '17 at 23:10
Hi, .... 59 likes ? I didn't see arrays of struct, I only see arrays of variable from struck...
– delive
Mar 15 '17 at 23:10
add a comment |
I think you could write it that way too. I am also a student so I understand your struggle. A bit late response but ok .
#include<stdio.h>
#define n 3
struct
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
bodies[n];
add a comment |
I think you could write it that way too. I am also a student so I understand your struggle. A bit late response but ok .
#include<stdio.h>
#define n 3
struct
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
bodies[n];
add a comment |
I think you could write it that way too. I am also a student so I understand your struggle. A bit late response but ok .
#include<stdio.h>
#define n 3
struct
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
bodies[n];
I think you could write it that way too. I am also a student so I understand your struggle. A bit late response but ok .
#include<stdio.h>
#define n 3
struct
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
bodies[n];
answered Jun 8 '15 at 18:48
ChristakitosChristakitos
11316
11316
add a comment |
add a comment |
move
struct body bodies[n];
to after
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
Rest all looks fine.
add a comment |
move
struct body bodies[n];
to after
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
Rest all looks fine.
add a comment |
move
struct body bodies[n];
to after
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
Rest all looks fine.
move
struct body bodies[n];
to after
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
;
Rest all looks fine.
answered May 6 '12 at 4:41
vrk001vrk001
265129
265129
add a comment |
add a comment |
So to put it all together by using malloc()
:
int main(int argc, char** argv)
typedef struct
char* firstName;
char* lastName;
int day;
int month;
int year;
STUDENT;
int numStudents=3;
int x;
STUDENT* students = malloc(numStudents * sizeof *students);
for (x = 0; x < numStudents; x++)
students[x].firstName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].firstName);
students[x].lastName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].lastName);
scanf("%d",&students[x].day);
scanf("%d",&students[x].month);
scanf("%d",&students[x].year);
for (x = 0; x < numStudents; x++)
printf("first name: %s, surname: %s, day: %d, month: %d, year: %dn",students[x].firstName,students[x].lastName,students[x].day,students[x].month,students[x].year);
return (EXIT_SUCCESS);
7
Should your malloc line have numStudents * sizeof(STUDENT)?
– Todd
Jul 24 '14 at 16:57
@Todd It's better not to.sizeof *students
is the same thing and it won't be wrong if STUDENT ever happens to change.
– trentcl
Mar 11 '16 at 18:18
add a comment |
So to put it all together by using malloc()
:
int main(int argc, char** argv)
typedef struct
char* firstName;
char* lastName;
int day;
int month;
int year;
STUDENT;
int numStudents=3;
int x;
STUDENT* students = malloc(numStudents * sizeof *students);
for (x = 0; x < numStudents; x++)
students[x].firstName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].firstName);
students[x].lastName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].lastName);
scanf("%d",&students[x].day);
scanf("%d",&students[x].month);
scanf("%d",&students[x].year);
for (x = 0; x < numStudents; x++)
printf("first name: %s, surname: %s, day: %d, month: %d, year: %dn",students[x].firstName,students[x].lastName,students[x].day,students[x].month,students[x].year);
return (EXIT_SUCCESS);
7
Should your malloc line have numStudents * sizeof(STUDENT)?
– Todd
Jul 24 '14 at 16:57
@Todd It's better not to.sizeof *students
is the same thing and it won't be wrong if STUDENT ever happens to change.
– trentcl
Mar 11 '16 at 18:18
add a comment |
So to put it all together by using malloc()
:
int main(int argc, char** argv)
typedef struct
char* firstName;
char* lastName;
int day;
int month;
int year;
STUDENT;
int numStudents=3;
int x;
STUDENT* students = malloc(numStudents * sizeof *students);
for (x = 0; x < numStudents; x++)
students[x].firstName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].firstName);
students[x].lastName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].lastName);
scanf("%d",&students[x].day);
scanf("%d",&students[x].month);
scanf("%d",&students[x].year);
for (x = 0; x < numStudents; x++)
printf("first name: %s, surname: %s, day: %d, month: %d, year: %dn",students[x].firstName,students[x].lastName,students[x].day,students[x].month,students[x].year);
return (EXIT_SUCCESS);
So to put it all together by using malloc()
:
int main(int argc, char** argv)
typedef struct
char* firstName;
char* lastName;
int day;
int month;
int year;
STUDENT;
int numStudents=3;
int x;
STUDENT* students = malloc(numStudents * sizeof *students);
for (x = 0; x < numStudents; x++)
students[x].firstName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].firstName);
students[x].lastName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].lastName);
scanf("%d",&students[x].day);
scanf("%d",&students[x].month);
scanf("%d",&students[x].year);
for (x = 0; x < numStudents; x++)
printf("first name: %s, surname: %s, day: %d, month: %d, year: %dn",students[x].firstName,students[x].lastName,students[x].day,students[x].month,students[x].year);
return (EXIT_SUCCESS);
edited Sep 21 '17 at 4:57
Ryan
5010
5010
answered Jul 2 '14 at 22:20
DounchanDounchan
9117
9117
7
Should your malloc line have numStudents * sizeof(STUDENT)?
– Todd
Jul 24 '14 at 16:57
@Todd It's better not to.sizeof *students
is the same thing and it won't be wrong if STUDENT ever happens to change.
– trentcl
Mar 11 '16 at 18:18
add a comment |
7
Should your malloc line have numStudents * sizeof(STUDENT)?
– Todd
Jul 24 '14 at 16:57
@Todd It's better not to.sizeof *students
is the same thing and it won't be wrong if STUDENT ever happens to change.
– trentcl
Mar 11 '16 at 18:18
7
7
Should your malloc line have numStudents * sizeof(STUDENT)?
– Todd
Jul 24 '14 at 16:57
Should your malloc line have numStudents * sizeof(STUDENT)?
– Todd
Jul 24 '14 at 16:57
@Todd It's better not to.
sizeof *students
is the same thing and it won't be wrong if STUDENT ever happens to change.– trentcl
Mar 11 '16 at 18:18
@Todd It's better not to.
sizeof *students
is the same thing and it won't be wrong if STUDENT ever happens to change.– trentcl
Mar 11 '16 at 18:18
add a comment |
That error means that the compiler is not able to find the definition of the type of your struct before the declaration of the array of structs, since you're saying you have the definition of the struct in a header file and the error is in nbody.c
then you should check if you're including correctly the header file.
Check your #include
's and make sure the definition of the struct is done before declaring any variable of that type.
i doubt OP means header as header file, as he wrote, "the line below is above the stuff above" before the struct array declaration which is in his nbody.c file. Lets wait for him to wake up and clear the doubt.
– nims
May 6 '12 at 4:52
@nims is correct, by header I meant the area above themain
statement.
– Amndeep7
May 6 '12 at 14:39
add a comment |
That error means that the compiler is not able to find the definition of the type of your struct before the declaration of the array of structs, since you're saying you have the definition of the struct in a header file and the error is in nbody.c
then you should check if you're including correctly the header file.
Check your #include
's and make sure the definition of the struct is done before declaring any variable of that type.
i doubt OP means header as header file, as he wrote, "the line below is above the stuff above" before the struct array declaration which is in his nbody.c file. Lets wait for him to wake up and clear the doubt.
– nims
May 6 '12 at 4:52
@nims is correct, by header I meant the area above themain
statement.
– Amndeep7
May 6 '12 at 14:39
add a comment |
That error means that the compiler is not able to find the definition of the type of your struct before the declaration of the array of structs, since you're saying you have the definition of the struct in a header file and the error is in nbody.c
then you should check if you're including correctly the header file.
Check your #include
's and make sure the definition of the struct is done before declaring any variable of that type.
That error means that the compiler is not able to find the definition of the type of your struct before the declaration of the array of structs, since you're saying you have the definition of the struct in a header file and the error is in nbody.c
then you should check if you're including correctly the header file.
Check your #include
's and make sure the definition of the struct is done before declaring any variable of that type.
answered May 6 '12 at 4:50
DavidDavid
2618
2618
i doubt OP means header as header file, as he wrote, "the line below is above the stuff above" before the struct array declaration which is in his nbody.c file. Lets wait for him to wake up and clear the doubt.
– nims
May 6 '12 at 4:52
@nims is correct, by header I meant the area above themain
statement.
– Amndeep7
May 6 '12 at 14:39
add a comment |
i doubt OP means header as header file, as he wrote, "the line below is above the stuff above" before the struct array declaration which is in his nbody.c file. Lets wait for him to wake up and clear the doubt.
– nims
May 6 '12 at 4:52
@nims is correct, by header I meant the area above themain
statement.
– Amndeep7
May 6 '12 at 14:39
i doubt OP means header as header file, as he wrote, "the line below is above the stuff above" before the struct array declaration which is in his nbody.c file. Lets wait for him to wake up and clear the doubt.
– nims
May 6 '12 at 4:52
i doubt OP means header as header file, as he wrote, "the line below is above the stuff above" before the struct array declaration which is in his nbody.c file. Lets wait for him to wake up and clear the doubt.
– nims
May 6 '12 at 4:52
@nims is correct, by header I meant the area above the
main
statement.– Amndeep7
May 6 '12 at 14:39
@nims is correct, by header I meant the area above the
main
statement.– Amndeep7
May 6 '12 at 14:39
add a comment |
Solution using pointers:
#include<stdio.h>
#include<stdlib.h>
#define n 3
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double *mass;
;
int main()
struct body *bodies = (struct body*)malloc(n*sizeof(struct body));
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
return 0;
add a comment |
Solution using pointers:
#include<stdio.h>
#include<stdlib.h>
#define n 3
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double *mass;
;
int main()
struct body *bodies = (struct body*)malloc(n*sizeof(struct body));
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
return 0;
add a comment |
Solution using pointers:
#include<stdio.h>
#include<stdlib.h>
#define n 3
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double *mass;
;
int main()
struct body *bodies = (struct body*)malloc(n*sizeof(struct body));
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
return 0;
Solution using pointers:
#include<stdio.h>
#include<stdlib.h>
#define n 3
struct body
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double *mass;
;
int main()
struct body *bodies = (struct body*)malloc(n*sizeof(struct body));
int a, b;
for(a = 0; a < n; a++)
for(b = 0; b < 3; b++)
bodies[a].p[b] = 0;
bodies[a].v[b] = 0;
bodies[a].a[b] = 0;
bodies[a].mass = 0;
bodies[a].radius = 1.0;
return 0;
answered Oct 16 '18 at 17:21
Helping BeanHelping Bean
1467
1467
add a comment |
add a comment |
Another way of initializing an array of structs is to initialize the array members explicitly. This approach is useful and simple if there aren't too many struct and array members.
Use the typedef
specifier to avoid re-using the struct
statement everytime you declare a struct variable:
typedef struct
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
Body;
Then declare your array of structs. Initialization of each element goes along with the declaration:
Body bodies[n] = 0,0,0, 0,0,0, 0,0,0, 0, 1.0,
0,0,0, 0,0,0, 0,0,0, 0, 1.0,
0,0,0, 0,0,0, 0,0,0, 0, 1.0;
To repeat, this is a rather simple and straightforward solution if you don't have too many array elements and large struct members and if you, as you stated, are not interested in a more dynamic approach. This approach can also be useful if the struct members are initialized with named enum-variables (and not just numbers like the example above) whereby it gives the code-reader a better overview of the purpose and function of a structure and its members in certain applications.
add a comment |
Another way of initializing an array of structs is to initialize the array members explicitly. This approach is useful and simple if there aren't too many struct and array members.
Use the typedef
specifier to avoid re-using the struct
statement everytime you declare a struct variable:
typedef struct
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
Body;
Then declare your array of structs. Initialization of each element goes along with the declaration:
Body bodies[n] = 0,0,0, 0,0,0, 0,0,0, 0, 1.0,
0,0,0, 0,0,0, 0,0,0, 0, 1.0,
0,0,0, 0,0,0, 0,0,0, 0, 1.0;
To repeat, this is a rather simple and straightforward solution if you don't have too many array elements and large struct members and if you, as you stated, are not interested in a more dynamic approach. This approach can also be useful if the struct members are initialized with named enum-variables (and not just numbers like the example above) whereby it gives the code-reader a better overview of the purpose and function of a structure and its members in certain applications.
add a comment |
Another way of initializing an array of structs is to initialize the array members explicitly. This approach is useful and simple if there aren't too many struct and array members.
Use the typedef
specifier to avoid re-using the struct
statement everytime you declare a struct variable:
typedef struct
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
Body;
Then declare your array of structs. Initialization of each element goes along with the declaration:
Body bodies[n] = 0,0,0, 0,0,0, 0,0,0, 0, 1.0,
0,0,0, 0,0,0, 0,0,0, 0, 1.0,
0,0,0, 0,0,0, 0,0,0, 0, 1.0;
To repeat, this is a rather simple and straightforward solution if you don't have too many array elements and large struct members and if you, as you stated, are not interested in a more dynamic approach. This approach can also be useful if the struct members are initialized with named enum-variables (and not just numbers like the example above) whereby it gives the code-reader a better overview of the purpose and function of a structure and its members in certain applications.
Another way of initializing an array of structs is to initialize the array members explicitly. This approach is useful and simple if there aren't too many struct and array members.
Use the typedef
specifier to avoid re-using the struct
statement everytime you declare a struct variable:
typedef struct
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
Body;
Then declare your array of structs. Initialization of each element goes along with the declaration:
Body bodies[n] = 0,0,0, 0,0,0, 0,0,0, 0, 1.0,
0,0,0, 0,0,0, 0,0,0, 0, 1.0,
0,0,0, 0,0,0, 0,0,0, 0, 1.0;
To repeat, this is a rather simple and straightforward solution if you don't have too many array elements and large struct members and if you, as you stated, are not interested in a more dynamic approach. This approach can also be useful if the struct members are initialized with named enum-variables (and not just numbers like the example above) whereby it gives the code-reader a better overview of the purpose and function of a structure and its members in certain applications.
answered Jan 14 at 10:40
Abdel AleemAbdel Aleem
356
356
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f10468128%2fhow-do-you-make-an-array-of-structs-in-c%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Well, it works fine for me. Aren't you declaring
struct body bodies[n];
beforestruct body
declaration?– Jack
May 6 '12 at 4:50