80 likes | 100 Views
Learn about structures, structure variables, preprocessor directives, passing structures as parameters, complex structures, arrays of structures, and more in C programming.
E N D
Structures putting data together
Structure Definitions • aggregate construct allows to manipulate several data items as a single whole • structures are an aggregate construct; • what other aggregate constructs have we studied? • example: bank’s certificate of deposit (CD) - has balance (int), rate (int) and months until maturity (int) • structure definition: struct CDAacct{ int balance; int rate; int term; }; • note the semicolon at the end of the structure definition! • elements of the structure are called members or member variables • structure definition is not executable – good candidate for a header file • members of the same structure must have different names, different structures can contain members with the same name • that is: the scope of member name is the structure definition
Preprocessor Directives (Review) • each definition (e.g. global constant def.) can be encountered only once during compilation • when definition is placed in a header file, it may be included multiple times • header file must structured so it is safe in case of multiple inclusion; term – multiple inclusion protection • mechanism - preprocessor directives #define name value note that substitution is textual • problem: #define press 50+5 int myvar = press * 20; changes order of operations, do not use #define instead of global constants #ifdef name - true if name defined, #ifndefname - true if not #endif - completes #if • header file myheader.h containing definitions usually has the following structure: #ifndef MYHEADER_H #define MYHEADER_H // text of the header file goes here #endif
Structure Variables • when structure CDAcct is defined, structure variables can be declared as any other variables: CDAcct myacct, youracct; • each structure variable of CDAcct contains three member variables • programmer can refer to member variable by specifying structure variable name “dot” member variable name • for example myacct contains: myacct.balance myacct.rate myacct.term • member variables are of type specified in the structure definition • member variables can be used as any other (scalar) variables myacct.balance=1000; myacct.rate = youracct.rate+1; cin >> myacct.term;
Assigning Values toStructure Variables • initialization • structure variable can be initialized: CDAcct myacct={1000, 9, 12}; • order of initialization corresponds to the order member of member variables in structure definition • more values than variable members – error • less values than variable members – the rest initialized to 0 • structure variable can be assigned the value of another structure variable of the same structure type CDAcct youracct; youracct=myacct; • structure variables cannot be directly compared if (youracct == myacct) // error
Passing Structures as Parameters,Returning Structures • structures can be passed by value and by reference, a function can return a structure: CDAccount setCD(int b, int r, int t){ CDAccount tmp; tmp.balance=b; tmp.rate=r; tmp.term=t; return tmp; }
Complex Structures • a member may be of basic type or of type structure (referred to as substructure): // example structure struct example{ int a; string b; }; // example complex structure struct compExample{ int c; example d; // substructure }; • if there is a declaration compExample me;how do we access substructure member variables?
Structures and Arrays • a member may be an array struct exampleWArray{ // complex structure definition int a; int b[5]; // member array }; exampleWArray se; // declaring structure variable se.a = 123; se.b[3]=456; // accessing members • an array of structures may be declared struct example{ //structure int a; string b; }; example as[4]; // declaring array of structures as[3].a=123; as[3].b=”Hello”; // accessing members how do we access characters of string b? • more complicated constructs (arrays of structures with substructures, etc.) are possible