This question already has an answer here:
- Structure Problem in C 12 answers
I tried to find out what a struct really 'is' and hit a problem, so I have really 2 questions:
1) What is saved in 'sara'? Is it a pointer to the first element of the struct?
2) The more interesting question: Why doesn't it compile? GCC says "test.c:10: error: incompatible types in assignment" and I can't figure out why... (This part has been solved by your answers already, great!)
#include <stdio.h>
struct name {
char first[20];
char last[20];
};
int main() {
struct name sara;
sara.first = "Sara";
sara.last = "Black";
printf("struct direct: %x\n",sara);
printf("struct deref: %x\t%s\n", *sara, *sara);
}
Thanks for your help!
Or you could just use dynamic allocation, e.g.:
You can also initialise it like this:
Since (as a special case) you're allowed to initialise char arrays from string constants.
Now, as for what a struct actually is - it's a compound type composed of other values. What
sara
actually looks like in memory is a block of 20 consecutive char values (which can be referred to usingsara.first
, followed by 0 or more padding bytes, followed by another block of 20 consecutive char values (which can be referred to usingsara.last
). All other instances of thestruct name
type are laid out in the same way.In this case, it is very unlikely that there is any padding, so a
struct name
is just a block of 40 characters, for which you have a name for the first 20 and the last 20.You can find out how big a block of memory a
struct name
takes usingsizeof(struct name)
, and you can find out where within that block of memory each member of the structure is placed at usingoffsetof(struct name, first)
andoffsetof(struct name, last)
.You can try in this way. I had applied this in my case.
The Sara structure is a memory block containing the variables inside. There is nearly no difference between a classic declarations :
and a structure :
In both case, you are just allocating some memory to store variables, and in both case there will be 20+4 bytes reserved. In your case, Sara is just a memory block of 2x20 bytes.
The only difference is that with a structure, the memory is allocated as a single block, so if you take the starting address of Sara and jump 20 bytes, you'll find the "last" variable. This can be useful sometimes.
check http://publications.gbdirect.co.uk/c_book/chapter6/structures.html for more :) .
This has nothing to do with structs - arrays in C are not assignable:
you need to use strcpy:
or in your code:
sara
is the struct itself, not a pointer (i.e. the variable representing location on the stack where actual struct data is stored). Therefore,*sara
is meaningless and won't compile.