$30
- Structures on the Memory
A structure type in C is a type that specifies the format of a record with one or more members, where each member has a specified name and type. These members are stored on memory in the order that they are declared in the definition of the structure, and the address of the first member is identical to the address of the structure object itself.
For example, if we consider the following definition for structure course:
struct course{ char code[5]; int number; char year[4];
And, the following declaration of an instance of struct course:
struct course my_course = {“ENCM”, 339, “2nd”};
The address of member my_course.code is identical to the address of my_course, and the address of member my_course.number is greater than the address of the previous member, my_course.code. However, the address of the member my_course.number will not be necessarily the address of the following byte right after the end of memory space allocated for the member my_course.code. It means there might be gaps, or unused bytes between the members. The compiler may align the members of a structure for certain kind of the addresses, such as 32-bit boundaries, to ensure fast access to the members. As a result, the size of an instance of structure such as course is not necessarily equal to the sum of the size of the members; it might be greater.
– Structures and Pointers
In principle, a pointer to a C structure type is not much different from other types of pointers. They are basically supposed to hold the address of a struct object and they are of the same size as other pointers.
Please notice, when drawing AR diagrams make sure to be clear whether the arrowhead points to the entire struct instance or to a member of the structure. Please see the following example:
struct course* struct_ptr = & my_course; char* member_ptr = mty_course.year;
Download the file lab5exA.c, and lab5_point.h from D2L. Read the program carefully and try to predict the output of the program. Note: when you compile the program, some compilers may display a warning. For this exercise you can ignore this warning. Now, run the program to compare the results with your prediction. Then, draw an AR diagram for point one. Your diagram doesn’t need to show the string constants used within printf functions, on the static storage.
): Draw AR Diagrams :
Download file lab5exe_C.c, lab5exe_C.h, and lab5exe_C.txt, from D2L. This exercise
receives its input from text file, lab5exe_C.txt, and populates an array of structure called Bits_Pattern with the available data in this file. Study the content of the downloaded files carefully to understand what the program does. Then draw a memory when the program reaches point one for the second time.
Note: in your AR diagram you don't need to show where exactly a FILE pointer points. Just mention it points to “somewhere on the memory” as following figure shows:
FILE * fp = fopen(“a_file_name”, “r”);
Writing into a Text File:
Download file lab5exe_D.c, lab5exe_D.h, and lab5exe_D.txt, from D2L. If you read the given files carefully you will notice that this program reads the content of the file lab5exe_D.txt into an array of integers that is declared within the body of a structure called IntVector. Then, the program displays the stored values of array on the screen in a single column format. Your task in this exercise is to complete the definition of the function called display_multiple_column. Please see the function interface comment for more details.
Step 1: Download file lab5exE.c and lab5exE.h from D2L, and change the definition of struct point to a three dimensional point, by adding the third coordinate of type double, called z.
Step 2: change the first two lines in the main function to assign values for z-coordinate for struct instances alpha and beta to 56.0 and 97.0, respectively.
Step 3: modify the definition of any function, if needed, so that they all work for a three-D point.
Step 5: Complete the missing code in functions distance, mid_point, and swap.
For your information: The distance, d, between two three-D point a(x1, y1, z1) and point b(x2, y2, z2) can be calculated by:
Download file lab5exF.c and lab5exF.h from D2L. In this exercise an array of Point with 10 elements is created and filled with some sort of random values.
A sample-run of the program shows that the ten elements of struct_array, were filled with the following values for <x, y, z>. Also, points have labels such as A9, z9, B7, and so on.
Array of Points contains:
struct_array[0]: A9 <700.00, 840.00, 1050.00> struct_array[1]: z8 <300.00, 360.00, 450.00> struct_array[2]: B7 <999.00, 1200.00, 1500.00> struct_array[3]: y6 <599.00, 719.00, 900.00> struct_array[4]: C5 <198.00, 239.00, 299.00> struct_array[5]: x4 <898.00, 1079.00, 1349.00> struct_array[6]: D3 <497.00, 598.00, 749.00> struct_array[7]: w2 <97.00, 118.00, 149.00> struct_array[8]: E1 <796.00, 958.00, 1198.00> struct_array[9]: v0 <396.00, 477.00, 598.00>
Now your job is to write the definition of the functions search, and reverse, based on the function interfaced comments given in the file lab5ExF.h.