Basics of Integer Double 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 integer double dimension array ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What are the different expressions of double dimension array ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What are synonymous expresions of double dimension array ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How to find sizeof() of expressions of double dimension array ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Topics in this section, * :ref:`Integer Double Dimension Array : Syntax ` * :ref:`Integer Double Dimension Array : FAQs ` * :ref:`Integer Double Dimension Array : Basic Examples ` * :ref:`Integer Double Dimension Array : Basic Example 1 ` * :ref:`Integer Double Dimension Array : Basic Properties ` * :ref:`Integer Double Dimension Array : Basic Expressions ` * :ref:`Integer Double Dimension Array : Synonym Expressions ` * :ref:`Integer Double Dimension Array : typeof(expression) ` * :ref:`Integer Double Dimension Array : sizeof(expression) ` * :ref:`Integer Double Dimension Array : fun(expression) ` * :ref:`Integer Double Dimension Array : All Examples of Function Calls ` .. _array_n_ptrs_int_dd_array_ex_0_0: .. tab-set:: .. tab-item:: Integer Double Dimension Array : Syntax .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow int array_name[Row][Column]; .. _array_n_ptrs_int_dd_array_ex_0_1: .. tab-set:: .. tab-item:: Integer Double Dimension Array : FAQs Consider a integer double dimension array .. code-block:: c int a[3][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 integers can be stored in this array ? .. dropdown:: See Answer Number of Integers = Rows * Columns = 3 * 4 = 12 .. 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 = Rows * Columns * sizeof(int) = 3 * 4 * 4 = 48 .. 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 = Rows * Columns * sizeof(int )= 3 * 4 * 4 = 48 .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How many single dimension arrays are present in this double dimension array ? .. dropdown:: See Answer There are 3 Single dimension arrays. Size of each single dimension array is 4 integers which is equal to 4 * 4 = 16 Bytes .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What are the names of single dimension arrays in this double dimension array ? .. dropdown:: See Answer a[0] a[1] a[2] .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How do you represent the first integer ? .. dropdown:: See Answer a[0][0] .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How do you represent the last integer ? .. dropdown:: See Answer a[2][3] .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How do you initialise the array at the time of declaration ? .. dropdown:: See Answer .. code-block:: c int a[3][4] = { { 1, 2, 3, 4 }, { 10, 20, 30, 40 }, { 100, 200, 300, 400 }, }; .. _array_n_ptrs_int_dd_array_ex_0_2: .. tab-set:: .. tab-item:: Integer Double Dimension Array : Basic Examples .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Let us now explore basic examples of double dimension array ! .. _array_n_ptrs_int_dd_array_ex_0_3: .. tab-set:: .. tab-item:: Integer Double Dimension Array : Basic Example 1 * Step 1 : Define a Double Dimension Array .. code-block:: c int a[3][4] = { { 1, 2, 3, 4 }, { 10, 20, 30, 40 }, { 100, 200, 300, 400 }, }; * Step 2 : Access and Print individual integers .. code-block:: c for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("%d ", a[i][j]); } printf("\n"); } * Step 4 : See the full program below .. code-block:: c #include int main(void) { int a[3][4] = { { 1, 2, 3, 4 }, { 10, 20, 30, 40 }, { 100, 200, 300, 400 }, }; // print individual integers printf("--------- Access and Print Integers ----------\n"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 4 ; j++) { printf("%d ", a[i][j]); } printf("\n"); } return 0; } * Step 5 : Output is as below .. code-block:: c --------- Access and Print Integers ---------- 1 2 3 4 10 20 30 40 100 200 300 400 .. _array_n_ptrs_int_dd_array_ex_1: .. tab-set:: .. tab-item:: Integer Double 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 ! Below are the properties * Expressions * Synonyms * typeof(expression) * sizeof(expression) * fun(expression) .. _array_n_ptrs_int_dd_array_ex_2: .. tab-set:: .. tab-item:: Integer Double 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][0] * ``a[0][0]`` is a integer a[1][0] * ``a[1][0]`` is a integer a[2][0] * ``a[2][0]`` is a integer &a[0][0] * ``&a[0][0]`` is address of a integer &a[1][0] * ``&a[1][0]`` is address of a integer &a[2][0] * ``&a[2][0]`` is address of a integer \*\*a * \*\*a is integer. Same as a[0][0] \*(\*(a + 1) + 0) * \*(\*(a + 1) + 0) is a integer. Same as a[1][0] \*(\*(a + 2) + 0) * \*(\*(a + 2) + 0) is a integer. Same as a[2][0] a[0] * ``a[0]`` is a single dimension array a[1] * ``a[1]`` is a single dimension array a[2] * ``a[2]`` is a single dimension array &a[0] * ``&a[0]`` is address of a single dimension array &a[1] * ``&a[1]`` is address of a single dimension array &a[2] * ``&a[2]`` is address of a single dimension array \*a * ``*a`` is a single dimension array \*(a + 1) * ``*(a + 1)`` is a single dimension array \*(a + 2) * ``*(a + 2)`` is a single dimension array a * ``a`` is address of a single dimension array a + 1 * ``a + 1`` is address of a single dimension array a + 2 * ``a + 2`` is address of a single dimension array &a * ``&a`` is the address of double dimension array =================== ====================================================== .. _array_n_ptrs_int_dd_array_ex_3: .. tab-set:: .. tab-item:: Integer Double 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][0] \*\*a a[1][0] \*(\*(a + 1) + 0) a[2][0] \*(\*(a + 2) + 0) &a[0][0] a[0] &a[1][0] a[1] &a[2][0] a[2] \*\*a a[0][0] \*(\*(a + 1) + 0) a[1][0] \*(\*(a + 2) + 0) a[2][0] a[0] \*a &a[0][0] a[1] \*(a + 1) &a[1][0] a[2] \*(a + 2) &a[2][0] &a[0] a + 0 a &a[1] a + 1 &a[2] a + 2 \*a a[0] &a[0][0] \*(a + 1) a[1] &a[1][0] \*(a + 2) a[2] &a[2][0] a &a[0] a + 1 &a[1] a + 2 &a[2] &a &a =================== ======================================== .. _array_n_ptrs_int_dd_array_ex_4: .. tab-set:: .. tab-item:: Integer Double 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][0] int * ``a[0][0]`` is a integer a[1][0] int * ``a[1][0]`` is a integer a[2][0] int * ``a[2][0]`` is a integer &a[0][0] int * * ``&a[0][0]`` is address of a integer &a[1][0] int * * ``&a[1][0]`` is address of a integer &a[2][0] int * * ``&a[2][0]`` is address of a integer \*\*a int * ``**a`` is integer. Same as a[0][0] \*(\*(a + 1) + 0) int * ``*(*(a + 1) + 0)`` is a integer. Same as ``a[1][0]`` \*(\*(a + 2) + 0) int * ``*(*(a + 2) + 0)`` is a integer. Same as ``a[2][0]`` a[0] int * * ``a[0]`` is a single dimension integer array * Hence type is ``int *`` a[1] int * * ``a[1]`` is a single dimension integer array * Hence type is ``int *`` a[2] int * * ``a[2]`` is a single dimension integer array * Hence type is ``int *`` &a[0] int * * ``a[0]`` is a single dimension integer array * Hence ``typeof(&a[0])`` is ``int (* )[4]`` &a[1] int * * ``a[1]`` is a single dimension integer array * Hence ``typeof(&a[1])`` is ``int (* )[4]`` &a[2] int * * ``a[2]`` is a single dimension integer array * Hence ``typeof(&a[2])`` is ``int (* )[4]`` \*a int * ``*a`` is a single dimension integer array * Hence type is ``int *`` \*(a + 1) int * ``*(a + 1)`` is a single dimension integer array * Hence type is ``int *`` \*(a + 2) int * ``*(a + 2)`` is a single dimension integer array * Hence type is ``int *`` a int * * ``a`` is equal to ``&a[0]`` * Hence ``typeof(a)`` is ``int (* )[4]`` a + 1 int * * ``a + 1`` is equal to ``&a[1]`` * Hence ``typeof(a + 1)`` is ``int (* )[4]`` a + 2 int * * ``a + 2`` is equal to ``&a[2]`` * Hence ``typeof(a + 2)`` is ``int (* )[4]`` &a int (*)[3][4] * ``&a`` is address of complete array =================== ============== ========================================================= .. _array_n_ptrs_int_dd_array_ex_5: .. tab-set:: .. tab-item:: Integer Double Dimension Array : sizeof(expression) ========================== ========= =============================== sizeof(expression) size Description ========================== ========= =============================== sizeof(a[0][0]) 4 a[0][0] is a integer sizeof(a[1][0]) 4 a[1][0] is a integer sizeof(a[2][0]) 4 a[2][0] is a integer sizeof(&a[0][0]) 8 &a[0][0] is address / pointer sizeof(&a[1][0]) 8 &a[1][0] is address / pointer sizeof(&a[2][0]) 8 &a[2][0] is address / pointer sizeof(\*\*a) 4 \*\*a is a integer sizeof(\*(\*(a + 1) + 0)) 4 \*(\*(a + 1) + 0) is a integer sizeof(\*(\*(a + 2) + 0)) 4 \*(\*(a + 2) + 0) is a integer sizeof(a[0]) 16 a[0] is a single dimension array sizeof(a[1]) 16 a[1] is a single dimension array sizeof(a[2]) 16 a[2] is a single dimension array sizeof(&a[0]) 8 &a[0] is address / pointer sizeof(&a[1]) 8 &a[1] is address / pointer sizeof(&a[2]) 8 &a[2] is address / pointer sizeof(\*a) 16 \*a is a single dimension array sizeof(\*(a + 1)) 16 \*(a + 1) is a single dimension array sizeof(\*(a + 2)) 16 \*(a + 2) is a single dimension array sizeof(a) 48 a is a double dimension array sizeof(a + 1) 8 a + 1 is address / pointer sizeof(a + 2) 8 a + 2 is address / pointer sizeof(&a) 8 &a is address / pointer ========================== ========= =============================== * See the full program below .. code-block:: c #include int main(void) { int a[3][4] = { { 1, 2, 3, 4 }, { 10, 20, 30, 40 }, { 100, 200, 300, 400 }, }; printf("sizeof(a[0][0]) = %d\n", (int) sizeof(a[0][0]) ); printf("sizeof(a[1][0]) = %d\n", (int) sizeof(a[1][0]) ); printf("sizeof(a[2][0]) = %d\n", (int) sizeof(a[2][0]) ); printf("sizeof(&a[0][0]) = %d\n", (int) sizeof(&a[0][0]) ); printf("sizeof(&a[1][0]) = %d\n", (int) sizeof(&a[1][1]) ); printf("sizeof(&a[2][0]) = %d\n", (int) sizeof(&a[2][0]) ); printf("sizeof(**a) = %d\n", (int) sizeof(**a)); printf("sizeof(*(*(a + 1) + 0)) = %d\n", (int) sizeof(*(*(a + 1) + 0)) ); printf("sizeof(*(*(a + 2) + 0)) = %d\n", (int) sizeof(*(*(a + 2) + 0)) ); printf("sizeof(a[0]) = %d\n", (int) sizeof(a[0]) ); printf("sizeof(a[1]) = %d\n", (int) sizeof(a[1]) ); printf("sizeof(a[2]) = %d\n", (int) sizeof(a[2]) ); printf("sizeof(&a[0]) = %d\n", (int) sizeof(&a[0]) ); printf("sizeof(&a[1]) = %d\n", (int) sizeof(&a[1]) ); printf("sizeof(&a[2]) = %d\n", (int) sizeof(&a[2]) ); printf("sizeof(*a) = %d\n", (int) sizeof(*a) ); printf("sizeof(*(a + 1)) = %d\n", (int) sizeof(*(a + 1)) ); printf("sizeof(*(a + 2)) = %d\n", (int) sizeof(*(a + 2)) ); printf("sizeof(a) = %d\n", (int) sizeof(a) ); printf("sizeof(a + 1) = %d\n", (int) sizeof(a + 1) ); printf("sizeof(a + 2) = %d\n", (int) sizeof(a + 2) ); printf("sizeof(&a) = %d\n", (int) sizeof(&a) ); return 0; } * Output is as below on 64 bit OS .. code-block:: c sizeof(a[0][0]) = 4 sizeof(a[1][0]) = 4 sizeof(a[2][0]) = 4 sizeof(&a[0][0]) = 8 sizeof(&a[1][0]) = 8 sizeof(&a[2][0]) = 8 sizeof(**a) = 4 sizeof(*(*(a + 1) + 0)) = 4 sizeof(*(*(a + 2) + 0)) = 4 sizeof(a[0]) = 16 sizeof(a[1]) = 16 sizeof(a[2]) = 16 sizeof(&a[0]) = 8 sizeof(&a[1]) = 8 sizeof(&a[2]) = 8 sizeof(*a) = 16 sizeof(*(a + 1)) = 16 sizeof(*(a + 2)) = 16 sizeof(a) = 48 sizeof(a + 1) = 8 sizeof(a + 2) = 8 sizeof(&a) = 8 .. _array_n_ptrs_int_dd_array_ex_6: .. tab-set:: .. tab-item:: Integer Double 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][0]) void fun(int x) {} * Call by Value fun(a[1][0]) void fun(int x) {} * Call by Value fun(a[2][0]) void fun(int x) {} * Call by Value fun(&a[0][0]) void fun(int \*p) { } * Call by Reference fun(&a[1][0]) void fun(int \*p) { } * Call by Reference fun(&a[2][0]) void fun(int \*p) { } * Call by Reference fun(\*\*a) void fun(int x) {} * Call by Value fun(\*(\*(a + 1) + 0)) void fun(int x) {} * Call by Value fun(\*(\*(a + 2) + 0)) void fun(int x) {} * Call by Value fun(a[0]) void fun(int \*p) { } * Call by Reference fun(a[1]) void fun(int \*p) { } * Call by Reference fun(a[2]) void fun(int \*p) { } * Call by Reference fun(&a[0]) void fun(int (\*p)[4]) { } * Call by Reference fun(&a[1]) void fun(int (\*p)[4]) { } * Call by Reference fun(&a[2]) void fun(int (\*p)[4]) { } * Call by Reference fun(\*a) void fun(int \*p) { } * Call by Reference fun(\*(a + 1)) void fun(int \*p) { } * Call by Reference fun(\*(a + 2)) void fun(int \*p) { } * Call by Reference fun(a) void fun(int (\*p)[4]) { } * Call by Reference fun(a + 1) void fun(int (\*p)[4]) { } * Call by Reference fun(a + 2) void fun(int (\*p)[4]) { } * Call by Reference fun(&a) void fun(int (\*p)[3][4]) { } * Call by Reference ========================== =============================== ========================================================================== .. _array_n_ptrs_int_dd_array_ex_7: .. tab-set:: .. tab-item:: Integer Double 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_ints/int_dd_array` .. card:: See Also * Other topics of character and functions * :doc:`./int_sd_array` * :doc:`./int_dd_array` * :doc:`./int_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`