1 / 23

EEE 243B Applied Computer Programming

EEE 243B Applied Computer Programming. Structures §12.3. Review. What is the syntax for defining a type? The enumerated type is built on which other type? What is the value of each of the following? enum days {SUN, MON=-2, TUE, WED, THU, FRI, SAT};

Télécharger la présentation

EEE 243B Applied Computer Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EEE 243BApplied Computer Programming Structures §12.3

  2. Review • What is the syntax for defining a type? • The enumerated type is built on which other type? • What is the value of each of the following? enum days {SUN, MON=-2, TUE, WED, THU, FRI, SAT}; • How would I change the above enumerated type to define a new type called DAYS? Prof S.P. Leblanc

  3. Outline • Structures – Definition and Declaration • Tagged • Typedef • Structures - Initialization • Structures –Fields • Structures and pointers • Dynamic memory allocation Prof S.P. Leblanc

  4. Structures • If we only used standard types in our programs, they would be very large, and difficult to maintain. • A structure is a collection of related elements, (called fields), possibly of different types having a single name Prof S.P. Leblanc

  5. 1.Structure • If I want to describe my abstraction of a student I could collect the following info: • First name • Last name • College Number • Average • We can create a structure and declare a variable to store this information • This is similar to classes and class members • There are two different ways to declare a structure in C: • Tagged Structure • Type Declaration with typedef Prof S.P. Leblanc

  6. 1a. Tagged Structure Definition • Here we show a tagged structure; • struct STUDENT • { • char firstName[15]; • char lastName[25]; • char collegeNumber[6]; • float average; • }; Prof S.P. Leblanc

  7. 1a. Tagged Structures Declaration • To declare a variable for this structure, the struct keyword is repeated roughly the same as enum was for enumerated types: struct STUDENT aMilColStudent; Prof S.P. Leblanc

  8. 1b. typedef Structures • Similar to enumerated types, typedef may be used to avoid the requirement to repeat the struct keyword with each declaration: • For most applications, you should use type-defined structures, as they are preferable: • typedefstruct • { • char firstName[15]; • char lastName[25]; • char collegeNumber[6]; • float average; • }STUDENT; //name of the type • STUDENT aMilColStudent; //Declare a variable Prof S.P. Leblanc

  9. 2. Structure - initialization • Structures are initialised similarly to arrays. If we take the typedefSTUDENT and the variable aMilColStudentfrom the previous slide: STUDENT aMilColStudent = {"Joe", "Shmoe","45239",78.3}; You will have to come back much later to meet this OCdt Prof S.P. Leblanc

  10. Example • Define a typedefstructure for a car, include • the manufacturer, • model name, • transmission type (manual or automatic), • number of doors (2 , 3 , 4 or 5), • colour, (Green, Beige, Grey, Black) • year, • engine size (in # cylinders) • The types from last class can be used in the structure Prof S.P. Leblanc

  11. Example • Using the type just declared, declare a VEHICLE_TYPE variable for Manufacturer Chrysler Model Cordoba Year 1978 Doors 2 Cylinders 8 COLOURBLACK TRANSMISSION MANUAL Prof S.P. Leblanc

  12. Solution (1) typedefenum {MANUAL, AUTOMATIC} TRANSMISSION ; typedefenum { RED, WHITE, YELLOW, GREEN, BEIGE, GREY, BLACK} COLOUR; typedefenum { 2=2, 3, 4, 5} DOORS; Prof S.P. Leblanc

  13. Solution (2) typedefstruct { char manufacturer[25]; char model[25]; intyear; DOORS numDoors; TRANSMISSION transType; COLOUR carColour; intnumCylinders; } CAR; Prof S.P. Leblanc

  14. Solution (3) CAR myFirstCar = { "CHRYSLER", "CORDOBA", 1978, 2, MANUAL, BLACK, 8 }; Prof S.P. Leblanc

  15. 3.Structures and fields • Structures are constructed with fields. Everywhere you can use a variable you can use a structure field • Each field can be accessed individually with the structure member operator • (the period) . strcpy(aMilColStudent.firstName, "Bob"); aMilColStudent.collegeNumber = "98876"; You may meet this OCdt some day… Prof S.P. Leblanc

  16. 3. Structures Operators, = • Structures are entities that can be treated as a whole, but ONLY during an assignment operation: STUDENT fStudent = {"Jane", "Doe", {'2','3','4','9','8'}, 33.2}; //poor Jane! aMilColStudent = fStudent; • You cannot compare two structures: if (aMilColStudent == fStudent) printf("Totally an error"); Prof S.P. Leblanc

  17. 3. Structures and fields • In order to compare structures of the same type, you would need to write a function that compares each field in order: … //function returns 1 if all the field are equal intCompareStudents(STUDENT st1, STUDENT st2) { return ( !strcmp (st1.firstName,st2.firstName) && !strcmp (st1.lastName,st2.lastName) && !strcmp (st1.collegeNumber, st2.collegeNumber) && (fabs(st1.average - st2.average < 0.0001)) ); } Prof S.P. Leblanc

  18. 4. Structures and Pointers • Like any other type in C, pointers can point to structures. The pointer points to the first byte of the structure. • You can also use pointers to access fields: STUDENT* pStudent= &aMilColStudent; aMilColStudent.collegeNumber = "12345"; (* pStudent).collegeNumber = "12345"; • Result is the same; but we need the brackets around the dereferencing due to precedence Prof S.P. Leblanc

  19. 4. Structures and Pointers • Fortunately C provides another operator that allows us to dereference the pointer and access the field at the same time; the structure selection operator: pStudent->collegeNumber = "54321"; Prof S.P. Leblanc

  20. 5. Dynamic memory allocation • Recall that we can allocate memory dynamically • You can also allocate memory for any types including typedef'd structures: typedefstruct { char firstName[15]; char lastName[25]; } NAME; NAME *pName = NULL; pName = (NAME *)malloc (sizeof(NAME)); Prof S.P. Leblanc

  21. Quiz Time • What is printed in the following code? int* pInt; STUDENT aStudent={"Jane", "Doe", "23498", 33.2}; STUDENT* pStudent= &aStudent; pInt= &aStudent.collegeNumber; printf("%s \’s student Number is %ld", (*pStudent).firstName, *pInt); printf("%s \’s student Number is %ld", pStudent->firstName, aStudent.collegeNumber); Prof S.P. Leblanc

  22. Quiz Time • If you declare a variable that is a type-defined structure what operator do you use to access its fields? • If you have a pointer that points to a structure, what operator do you use to access each field? • Can you assign a complete structure to another? • Can you compare structures with == ? Prof S.P. Leblanc

  23. Next lecture • Linked List I Prof S.P. Leblanc

More Related