Basics of Structure Single Dimension Array =========================================== In this section, you are going to learn .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What are the basic properties of a structure single dimension array ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What are the different expressions of single dimension array ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What are synonymous expresions of single dimension array ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How to find sizeof() of expressions of single dimenstion array ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Topics in this section, * :ref:`Structure Single Dimension Array : Syntax ` * :ref:`Structure Single Dimension Array : FAQs ` * :ref:`Structure Single Dimension Array : Basic Examples ` * :ref:`Structure Single Dimension Array : Basic Example 1 ` * :ref:`Structure Single Dimension Array : Basic Properties ` * :ref:`Structure Single Dimension Array : Basic Expressions ` * :ref:`Structure Single Dimension Array : Synonym Expressions ` * :ref:`Structure Single Dimension Array : typeof(expression) ` * :ref:`Structure Single Dimension Array : sizeof(expression) ` * :ref:`Structure Single Dimension Array : fun(expression) ` * :ref:`Structure Single Dimension Array : All Examples of Function Calls ` .. _array_n_ptrs_struct_sd_array_ex_0_0: .. tab-set:: .. tab-item:: Structure Single Dimension Array : Syntax .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow struct XYZ array_name[Column]; .. _array_n_ptrs_struct_sd_array_ex_0_1: .. tab-set:: .. tab-item:: Structure Single Dimension Array : FAQs Consider a Structure Single Dimension Array .. code-block:: c struct XYZ { int x; int y; int z; }; struct XYZ a[4]; .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Let us answer few basic questions in this array .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How many structures can be stored in this array ? .. dropdown:: See Answer Number of Structures = 4 .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How many bytes are there in this array ? .. dropdown:: See Answer Number of Bytes = 4 * sizeof(struct XYZ) = 4 * 12 = 48 Bytes .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What is the sizeof the array ? .. dropdown:: See Answer sizeof(a) = Number of Bytes = 4 * sizeof(struct XYZ) = 4 * 12 = 48 Bytes .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How many bits can be stored in this array ? .. dropdown:: See Answer Number of Bits = sizeof(a) * 8 = 48 * 8 = 384 bits .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How do you initialise single dimension array during declaration ? .. dropdown:: See Answer .. code-block:: c struct XYZ a[4] = { {.x = 11, .y = 22, .z = 33}, {.x = 44, .y = 55, .z = 66}, {.x = 77, .y = 88, .z = 99}, {.x = 12, .y = 34, .z = 56} }; .. _array_n_ptrs_struct_sd_array_ex_0_2: .. tab-set:: .. tab-item:: Structure Single Dimension Array : Basic Examples .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Let us now explore basic examples of single dimension array ! .. _array_n_ptrs_struct_sd_array_ex_0_3: .. tab-set:: .. tab-item:: Structure Single Dimension Array : Basic Example 1 * Step 1 : Define a Single Dimension Array .. code-block:: c struct XYZ { int x; int y; int z; }; struct XYZ a[4] = { {.x = 11, .y = 22, .z = 33}, {.x = 44, .y = 55, .z = 66}, {.x = 77, .y = 88, .z = 99}, {.x = 12, .y = 34, .z = 56}, }; * Step 2 : Access and Print individual structures .. code-block:: c for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) { printf("a[%d].x = %d ", i, a[i].x); printf("a[%d].y = %d ", i, a[i].y); printf("a[%d].z = %d ", i, a[i].z); printf("\n"); } * Step 3 : See the full program below .. code-block:: c #include struct XYZ { int x; int y; int z; }; int main(void) { struct XYZ a[4] = { {.x = 11, .y = 22, .z = 33}, {.x = 44, .y = 55, .z = 66}, {.x = 77, .y = 88, .z = 99}, {.x = 12, .y = 34, .z = 56}, }; for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) { printf("a[%d].x = %d ", i, a[i].x); printf("a[%d].y = %d ", i, a[i].y); printf("a[%d].z = %d ", i, a[i].z); printf("\n"); } return 0; } * Step 4 : Output is as below .. code-block:: c a[0].x = 11 a[0].y = 22 a[0].z = 33 a[1].x = 44 a[1].y = 55 a[1].z = 66 a[2].x = 77 a[2].y = 88 a[2].z = 99 a[3].x = 12 a[3].y = 34 a[3].z = 56 .. _array_n_ptrs_struct_sd_array_ex_1: .. tab-set:: .. tab-item:: Structure Single Dimension Array : Basic Properties .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Let us now explore Double Dimension Array in depth ! Consider a structure single dimension array .. code-block:: c struct XYZ a[10]; Then below are the properties * Expressions * Synonyms * typeof(expression) * sizeof(expression) * fun(expression) .. _array_n_ptrs_struct_sd_array_ex_2: .. tab-set:: .. tab-item:: Structure Single Dimension Array : Basic Expressions .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Know what are the possible expressions and how to properly call them ! =================== ====================================================== Expression Description =================== ====================================================== a[0] * ``a[0]`` is first structure in the array a[1] * ``a[1]`` is second structure in the array a[9] * ``a[9]`` is tenth structure in the array &a[0] * ``&a[0]`` is address of first structure &a[1] * ``&a[1]`` is address of second structure &a[9] * ``&a[9]`` is address of tenth structure \*a * ``*a`` is first structure in the array \*(a + 1) * ``*(a + 1)`` is second structure in the array \*(a + 9) * ``*(a + 9)`` is tenth structure in the array a * ``a`` is address of first structure * ``a`` is an array of ten structures a + 1 * ``a + 1`` is address of second structure * ``a`` is an array of nine structures a + 9 * ``a + 9`` is address of tenth structure * ``a + 9`` is an array of one structure &a * ``&a`` is the address of array of structures =================== ====================================================== .. _array_n_ptrs_struct_sd_array_ex_3: .. tab-set:: .. tab-item:: Structure Single Dimension Array : Synonym Expressions .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Synonyms : Which can be used interchangeably ! .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Programmatically few expressions are one and the same ! Let us learn them =================== ======================================== Expression Synonyms =================== ======================================== a[0] \*a a[1] \*(a + 1) a[9] \*(a + 9) &a[0] a + 0 a &a[1] a + 1 &a[9] a + 9 \*a a[0] \*(a + 1) a[1] \*(a + 9) a[9] a &a[0] a + 1 &a[1] a + 9 &a[9] &a &a =================== ======================================== .. _array_n_ptrs_struct_sd_array_ex_4: .. tab-set:: .. tab-item:: Structure Single Dimension Array : typeof(expression) .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Finding the type of an expression is easy. See below =================== ==================== ========================================================= Expression Type Description =================== ==================== ========================================================= a[0] struct XYZ * ``a[0]`` is a structure * Hence type is ``struct XYZ`` a[1] struct XYZ * ``a[1]`` is a structure * Hence type is ``struct XYZ`` a[9] struct XYZ * ``a[9]`` is a structure * Hence type is ``struct XYZ`` &a[0] struct XYZ * * ``a[0]`` is a structure * ``typeof(a[0])`` is ``struct XYZ`` * Hence ``typeof(&a[0])`` is ``struct XYZ *`` &a[1] struct XYZ * * ``a[1]`` is a structure * ``typeof(a[1])`` is ``struct XYZ`` * Hence ``typeof(&a[1])`` is ``struct XYZ *`` &a[9] struct XYZ * * ``a[9]`` is a structure * ``typeof(a[9])`` is ``struct XYZ`` * Hence ``typeof(&a[9])`` is ``struct XYZ *`` \*a struct XYZ * ``*a`` is a structure * Hence type is ``struct XYZ`` \*(a + 1) struct XYZ * ``*(a + 1)`` is a structure * Hence type is ``struct XYZ`` \*(a + 9) struct XYZ * ``*(a + 9)`` is a structure * Hence type is ``struct XYZ`` a struct XYZ * * ``a`` is equal to ``&a[0]`` * Hence ``typeof(a)`` is ``struct XYZ *`` a + 1 struct XYZ * * ``a + 1`` is equal to ``&a[1]`` * Hence ``typeof(a + 1)`` is ``struct XYZ *`` a + 9 struct XYZ * * ``a + 9`` is equal to ``&a[9]`` * Hence ``typeof(a + 9)`` is ``struct XYZ *`` &a struct XYZ (* )[10] * ``&a`` is address of complete array =================== ==================== ========================================================= .. _array_n_ptrs_struct_sd_array_ex_5: .. tab-set:: .. tab-item:: Structure Single Dimension Array : sizeof(expression) =================== ========= =============================== sizeof(expression) size Description =================== ========= =============================== sizeof(a[0]) 12 Bytes a[0] is a structure sizeof(a[1]) 12 Bytes a[1] is a structure sizeof(a[9]) 12 Bytes a[9] is a struct XYZcter sizeof(&a[0]) 8 Bytes &a[0] is address / pointer sizeof(&a[1]) 8 Bytes &a[1] is address / pointer sizeof(&a[9]) 8 Bytes &a[9] is address / pointer sizeof(\*a) 12 Bytes \*a is a structure sizeof(\*(a + 1) ) 12 Bytes \*(a + 1) is a structure sizeof(\*(a + 9) ) 12 Bytes \*(a + 9) is a structure sizeof(a) 120 Bytes a is an array of 10 structures sizeof(a + 1) 8 Bytes a + 1 is address / pointer sizeof(a + 9) 8 Bytes a + 9 is address / pointer sizeof(&a) 8 Bytes &a is address / pointer =================== ========= =============================== * See the full program below .. code-block:: c #include struct XYZ { int x; int y; int z; }; int main(void) { struct XYZ a[10]; printf("sizeof(a[0]) = %d\t\n", (int) sizeof(a[0]) ); printf("sizeof(a[1]) = %d\t\n", (int) sizeof(a[1]) ); printf("sizeof(a[9]) = %d\t\n", (int) sizeof(a[9]) ); printf("sizeof(&a[0]) = %d\t\n", (int) sizeof(&a[0]) ); printf("sizeof(&a[1]) = %d\t\n", (int) sizeof(&a[1]) ); printf("sizeof(&a[9]) = %d\t\n", (int) sizeof(&a[9]) ); printf("sizeof(*a) = %d\t\n", (int) sizeof(*a) ); printf("sizeof( *(a + 1) ) = %d\t\n", (int) sizeof( *(a + 1) ) ); printf("sizeof( *(a + 9) ) = %d\t\n", (int) sizeof( *(a + 9) ) ); printf("sizeof(a) = %d\t\n", (int) sizeof(a) ); printf("sizeof(a + 1) = %d\t\n", (int) sizeof(a + 1) ); printf("sizeof(a + 9) = %d\t\n", (int) sizeof(a + 9) ); printf("sizeof(&a) = %d\t\n", (int) sizeof(&a) ); return 0; } * Output is as below on 64 bit OS .. code-block:: c sizeof(a[0]) = 12 sizeof(a[1]) = 12 sizeof(a[9]) = 12 sizeof(&a[0]) = 8 sizeof(&a[1]) = 8 sizeof(&a[9]) = 8 sizeof(*a) = 12 sizeof( *(a + 1) ) = 12 sizeof( *(a + 9) ) = 12 sizeof(a) = 120 sizeof(a + 1) = 8 sizeof(a + 9) = 8 sizeof(&a) = 8 .. _array_n_ptrs_struct_sd_array_ex_6: .. tab-set:: .. tab-item:: Structure Single Dimension Array : fun(expression) .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow If ``fun(x)`` is the function call, then ``fun(typeof(x))`` is the prototype / definition ================== ===================================== ========================================================================== Function Call Function Definition Observations ================== ===================================== ========================================================================== fun(a[0]) void fun(struct XYZ x) { } * Call by Value fun(a[1]) void fun(struct XYZ x) { } * Call by Value fun(a[9]) void fun(struct XYZ x) { } * Call by Value fun(&a[0]) void fun(struct XYZ \*p) { } * Call by Reference fun(&a[1]) void fun(struct XYZ \*p) { } * Call by Reference fun(&a[9]) void fun(struct XYZ \*p) { } * Call by Reference fun(\*a) void fun(struct XYZ x) { } * Call by Value fun(\*(a + 1)) void fun(struct XYZ x) { } * Call by Value fun(\*(a + 9)) void fun(struct XYZ x) { } * Call by Value fun(a) void fun(struct XYZ \*p) { } * Call by Reference fun(a + 1) void fun(struct XYZ \*p) { } * Call by Reference fun(a + 9) void fun(struct XYZ \*p) { } * Call by Reference fun(&a) void fun(struct XYZ (\*p) [10] ) { } * Call by Reference ================== ===================================== ========================================================================== .. _array_n_ptrs_struct_sd_array_ex_7: .. tab-set:: .. tab-item:: Structure Single Dimension Array : All Examples of Function Calls .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Read more about function calls and conventions of :doc:`../../funcs_n_ptrs/funcs_n_structs/struct_sd_array` .. card:: See Also * Other topics of character and functions * :doc:`./struct_sd_array` * :doc:`./struct_dd_array` * :doc:`./struct_td_array` * Current Module * :doc:`../array_n_ptrs` * Previous Module * :doc:`../../basic_ptr/basic_ptr` * Next Module * :doc:`../../malloc_ptr/malloc_ptr` * Other Modules * :doc:`../../variable_and_ptr/variable_and_ptr` * :doc:`../../array_n_ptrs/array_n_ptrs` * :doc:`../../malloc_ptr/malloc_ptr` * :doc:`../../typecasting_n_ptr/typecasting_n_ptr` * :doc:`../../const_ptr/const_ptr` * :doc:`../../void_ptr/void_ptr` * :doc:`../../array_of_ptr/array_of_ptr` * :doc:`../../ptr_to_array/ptr_to_array` * :doc:`../../function_ptr/function_ptr` * :doc:`../../memcpy_ptr/memcpy_ptr` * :doc:`../../pre_incr_ptr/pre_incr_ptr` * :doc:`../../post_incr_ptr/post_incr_ptr` * :doc:`../../pre_decr_ptr/pre_decr_ptr` * :doc:`../../post_decr_ptr/post_decr_ptr`