When is memory for a structure allocated in C? Is it when I declare it or when I create an instance of it? Also, why can static variables not be used within a struct?
            Asked
            
        
        
            Active
            
        
            Viewed 84 times
        
    1
            
            
        - 
                    3What would a "static variable within a struct" mean? – Oliver Charlesworth Mar 13 '16 at 18:37
- 
                    something like this: struct temp { static int a; }; when I create an instance of the above struct, the compiler says there is no member named 'a'. – Manali Kumar Mar 13 '16 at 18:46
- 
                    1A `struct` is _exactly_ the same as a variable. _Also, why can static variables not be used within a struct?_ : because it has not been designed into the C language. – Jabberwocky Mar 13 '16 at 18:55
- 
                    Possible duplicate of [Where are static variables stored (in C/C++)?](http://stackoverflow.com/questions/93039/where-are-static-variables-stored-in-c-c) – Sudipta Kumar Sahoo Mar 13 '16 at 19:19
- 
                    @Manali I think the question was not "How would I write it", but rather "what is it supposed to mean to the struct member" – tofro Mar 13 '16 at 19:54
1 Answers
1
            When you define a structure you are NOT allocating memory for it, that's the reason why you can use typedef to avoid writing struct my_struct_name. When you define a structure, you're declaring a data type that's why they don't take up data until you declare an instance of that structure.
struct point{   int x;  int y; };
This will not take up space until in a function or main you declare one like for example
int main(void){
    struct point mypoint1,mypoint2;//THIS IS WHEN MEMORY STARTS BEING ALLOCATED
    return 0;
}
Regarding the static, I don't think there's actually a point to declare a static to a structure? Why would you make an variable static to a structure?
 
    
    
        Mr. Branch
        
- 442
- 2
- 13
- 
                    Thanks! That was helpful. Ok I realize I do not need to make a variable static within a struct. However, a variable explicitly declared auto within a struct also throws a compiler error saying no such member. Any idea why that might be happening? Aren't variables auto by default anyway? – Manali Kumar Mar 13 '16 at 20:03
- 
                    Auto also makes sense to throw a compilation error since it deduces the data type. Suppose you define the same struct point I gave you put auto x; If in one point you put x=0, and another x=0.0 you'll have a problem. Also once Again I think there's actually no point, when you declare a structure you know what data types you're going to use inside of it. – Mr. Branch Mar 13 '16 at 20:08
