post increment char single pointer ==================================== In this section, you are going to learn .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow How to iterate character strings using ptr++ ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What is the meaning of ``ptr++``, ``*ptr++``, ``*(ptr++)``, ``*(ptr)++``, ``(*ptr)++`` ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What is the meaning of ``c = ptr++``, ``c = *ptr++``, ``c = *(ptr++)``, ``c = *(ptr)++``, ``c = (*ptr)++`` ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What is the difference between ``ptr++``, ``*ptr++``, ``*(ptr++)``, ``*(ptr)++``, ``(*ptr)++`` ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow What is the difference between ``c = ptr++``, ``c = *ptr++``, ``c = *(ptr++)``, ``c = *(ptr)++``, ``c = (*ptr)++`` ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Topics of Post Increment * :ref:`Basics of Post Increment ` * :ref:`Meaning of expressions ` * :ref:`Summary of expressions ` * :ref:`Post Increment : char pointer inside structure ` * :ref:`Post Increment : Function Call ` .. _post_incr_char_sp_mt_1: .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Basics of Post Increment * :ref:`ptr++ Basic Usage ` * :ref:`ptr++ : Iterate and print characters of a string : Method 1 ` * :ref:`ptr++ : Iterate and print characters of a string : Method 2 ` * :ref:`ptr++ : Iterate and print characters of a string : Method 3 ` * :ref:`ptr++ : Iterate and print characters of a string : Method 4 ` .. _post_incr_char_sp_ex_1: .. tab-set:: .. tab-item:: Example 1 : ``ptr++`` : Basic Usage * Step 1 : Define a Single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Point ``ptr`` to Single dimension array .. code-block:: c char *ptr; ptr = a; * Step 3 : Increment ``ptr`` .. code-block:: c ptr++; * Step 4 : Print ``*ptr`` .. code-block:: c printf("*ptr = %c\n", *ptr); * See full program below .. code-block:: c #include int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; ptr++; printf("*ptr = %c\n", *ptr); return 0; } .. _post_incr_char_sp_ex_2: .. tab-set:: .. tab-item:: Example 2 : ``ptr++`` : Iterate and print characters of a string : Method 1 * Step 1 : Define a Single Dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Point ``ptr`` to Single dimension array .. code-block:: c char *ptr; ptr = a; * Step 3 : Print string by iterating through all characters using ``ptr++`` .. code-block:: c for (int i = 0; i < strlen(a); i++) { printf("*ptr = %c\n", *ptr); ptr++; } * See full program below .. code-block:: c #include #include int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; for (int i = 0; i < strlen(a); i++) { printf("*ptr = %c\n", *ptr); ptr++; } return 0; } .. _post_incr_char_sp_ex_3: .. tab-set:: .. tab-item:: Example 3 : ``ptr++`` : Iterate and print characters of a string : Method 2 * Step 1 : Define a Single Dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Point ``ptr`` to Single dimension array .. code-block:: c char *ptr; ptr = a; * Step 3 : Print string by iterating through all characters using ``ptr++`` .. code-block:: c while (*ptr) { printf("*ptr = %c\n", *ptr); ptr++; } * See full program below .. code-block:: c #include #include int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; while (*ptr) { printf("*ptr = %c\n", *ptr); ptr++; } return 0; } .. _post_incr_char_sp_ex_4: .. tab-set:: .. tab-item:: Example 4 : ``ptr++`` : Iterate and print characters of a string : Method 3 * Step 1 : Define a Single Dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Point ``ptr`` to Single dimension array .. code-block:: c char *ptr; ptr = a; * Step 3 : Print string by iterating through all characters using ``ptr++`` .. code-block:: c while (*ptr) { char c; c = *ptr++; printf("*ptr = %c\n", c); } * See full program below .. code-block:: c #include #include int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; while (*ptr) { char c; c = *ptr++; printf("*ptr = %c\n", c); } return 0; } .. _post_incr_char_sp_ex_5: .. tab-set:: .. tab-item:: Example 5 : ``ptr++`` : Iterate and print characters of a string : Method 4 * Step 1 : Define a Single Dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Point ``ptr`` to Single dimension array .. code-block:: c char *ptr; ptr = a; * Step 3 : Print string by iterating through all characters using ``ptr++`` .. code-block:: c while (*ptr) { printf("*ptr = %c\n", *ptr++); } * See full program below .. code-block:: c #include #include int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; while (*ptr) { printf("*ptr = %c\n", *ptr++); } return 0; } .. _post_incr_char_sp_mt_2: .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Meaning of expressions * :ref:`Meaning of ptr++ and c = ptr++ ` * :ref:`Meaning of *(ptr++) and c = *(ptr++) ` * :ref:`Meaning of *ptr++ and c = *ptr++ ` * :ref:`Meaning of *(ptr)++ and c = *(ptr)++ ` * :ref:`Meaning of (*ptr)++ and c = (*ptr)++ ` .. _post_incr_char_sp_ex_6: .. tab-set:: .. tab-item:: Meaning of ``ptr++`` and ``c = ptr++`` .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * Consider statement .. code-block:: c p = ptr++; * There are two steps in this statement * Current value of ``ptr`` is assigned to ``p`` * ``ptr`` is incremented * We now derived a rule * First Assign, then increment * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Define a single pointer and point to array .. code-block:: c char *ptr; ptr = a; OR .. code-block:: c char *ptr; ptr = &a[0]; * Step 3 : Iterate and print the string .. code-block:: c while (*ptr) { char *p; p = ptr++; printf("*ptr = %c\n", *ptr); printf("*p = %c\n", *p); } Output is as below .. code-block:: c *ptr = a *p = L *ptr = p *p = a *ptr = t *p = p *ptr = o *p = t *ptr = p *p = o *ptr = *p = p .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Can you guess what is happening ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * Let us Recall .. code-block:: c p = ptr++; * There are two steps in this statement * Current value of ``ptr`` is assigned to ``p`` * ``ptr`` is incremented * We now derived a rule * First Assign, then increment * See full program below .. code-block:: c #include #include int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; while (*ptr) { char *p; p = ptr++; printf("*ptr = %c\n", *ptr); printf("*p = %c\n", *p); } return 0; } .. _post_incr_char_sp_ex_7: .. tab-set:: .. tab-item:: Meaning of ``*(ptr++)`` and ``c = *(ptr++)`` .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * Consider statement .. code-block:: c c = *(ptr++); * There are two steps in this statement * Current value of ``*ptr`` is assigned to ``c`` * ``ptr`` is incremented * ``*ptr`` is NOT incremented * We now derived a rule * First Assign, then increment * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Define a single pointer and point to array .. code-block:: c char *ptr; ptr = a; OR .. code-block:: c char *ptr; ptr = &a[0]; * Step 3 : Iterate and print the string .. code-block:: c while (*ptr) { char c; c = *(ptr++); printf("*ptr = %c\n", *ptr); printf("c = %c\n", c); } Output is as below .. code-block:: c *ptr = a c = L *ptr = p c = a *ptr = t c = p *ptr = o c = t *ptr = p c = o *ptr = c = p .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Can you guess what is happening ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * Let us Recall .. code-block:: c c = *(ptr++); * There are two steps in this statement * Current value of ``*ptr`` is assigned to ``c`` * ``ptr`` is incremented * ``*ptr`` is NOT incremented * We now derived a rule * First Assign, then increment * See full program below .. code-block:: c #include #include int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; while (*ptr) { char c; c = *(ptr++); printf("*ptr = %c\n", *ptr); printf("c = %c\n", c); } return 0; } .. _post_incr_char_sp_ex_10: .. tab-set:: .. tab-item:: Meaning of ``*ptr++`` and c = ``*ptr++`` .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * :ref:`Same as *(ptr++) and c = *(ptr++) ` .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * Consider statement .. code-block:: c c = *ptr++; * There are two steps in this statement * Current value of ``*ptr`` is assigned to ``c`` * ``ptr`` is incremented * ``*ptr`` is NOT incremented * We now derived a rule * First Assign, then increment * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Define a single pointer and point to array .. code-block:: c char *ptr; ptr = a; OR .. code-block:: c char *ptr; ptr = &a[0]; * Step 3 : Iterate and print the string .. code-block:: c while (*ptr) { char c; c = *ptr++; printf("*ptr = %c\n", *ptr); printf("c = %c\n", c); } Output is as below .. code-block:: c *ptr = a c = L *ptr = p c = a *ptr = t c = p *ptr = o c = t *ptr = p c = o *ptr = c = p .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Can you guess what is happening ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * Let us Recall .. code-block:: c c = *ptr++; * There are two steps in this statement * Current value of ``*ptr`` is assigned to ``c`` * ``ptr`` is incremented * ``*ptr`` is NOT incremented * We now derived a rule * First Assign, then increment * See full program below .. code-block:: c #include #include int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; while (*ptr) { char c; c = *ptr++; printf("*ptr = %c\n", *ptr); printf("c = %c\n", c); } return 0; } .. _post_incr_char_sp_ex_8: .. tab-set:: .. tab-item:: Meaning of ``*(ptr)++`` and ``c = *(ptr)++`` .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * :ref:`Same as *(ptr++) and c = *(ptr++) ` .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * Consider statement .. code-block:: c c = *(ptr)++; * There are two steps in this statement * Current value of ``*ptr`` is assigned to ``c`` * ``ptr`` is incremented * ``*ptr`` is NOT incremented * We now derived a rule * First Assign, then increment * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Define a single pointer and point to array .. code-block:: c char *ptr; ptr = a; OR .. code-block:: c char *ptr; ptr = &a[0]; * Step 3 : Iterate and print the string .. code-block:: c while (*ptr) { char c; c = *(ptr)++; printf("*ptr = %c\n", *ptr); printf("c = %c\n", c); } Output is as below .. code-block:: c *ptr = a c = L *ptr = p c = a *ptr = t c = p *ptr = o c = t *ptr = p c = o *ptr = c = p .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Can you guess what is happening ? .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * Let us Recall .. code-block:: c c = *(ptr)++; * There are two steps in this statement * Current value of ``*ptr`` is assigned to ``c`` * ``ptr`` is incremented * ``*ptr`` is NOT incremented * We now derived a rule * First Assign, then increment * See full program below .. code-block:: c #include #include int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; while (*ptr) { char c; c = *(ptr)++; printf("*ptr = %c\n", *ptr); printf("c = %c\n", c); } return 0; } .. _post_incr_char_sp_ex_9: .. tab-set:: .. tab-item:: Meaning of ``(*ptr)++`` and ``c = (*ptr)++`` .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * Consider statement .. code-block:: c c = (*ptr)++; * There are two steps in this statement * Current value of ``*ptr`` is assigned to ``c`` * ``ptr`` is NOT incremented * ``*ptr`` is incremented * We now derived a rule * First Assign, then increment .. _post_incr_char_sp_mt_3: .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Summary of expressions * :ref:`Summary of Post Increment expressions ` .. _post_incr_char_sp_ex_summary: .. tab-set:: .. tab-item:: Summary of Post Increment expressions ===================================== ========================================================================= Expression Explanation ===================================== ========================================================================= c = ptr++ * Assign ``ptr`` to ``c`` * Increment ``ptr`` c = \*(ptr++) * Assign ``*ptr`` to ``c`` * Increment ``ptr`` * DO NOT increment ``*ptr`` c = \*ptr++ * Assign ``*ptr`` to ``c`` * Increment ``ptr`` * DO NOT increment ``*ptr`` c = \*(ptr)++ * Assign ``*ptr`` to ``c`` * Increment ``ptr`` * DO NOT increment ``*ptr`` c = (\*ptr)++ * Assign ``*ptr`` to ``c`` * DO NOT increment ``ptr`` * Increment ``*ptr`` ===================================== ========================================================================= .. _post_incr_char_sp_mt_4: .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Post Increment : char pointer inside structure * :ref:`Char pointer accessed using Structure Object ` * :ref:`Char pointer accessed using Structure Single Pointer ` * :ref:`Char pointer accessed using Structure Double Pointer ` * :ref:`Char pointer accessed using Structure Triple Pointer ` * :ref:`Char pointer accessed using Nested Structure Object ` * :ref:`Char pointer accessed using Nested Structure Single Pointer ` * :ref:`Char pointer accessed using Nested Structure 2 level Pointers ` .. _post_incr_char_sp_ex_struct_ex_1: .. tab-set:: .. tab-item:: Char pointer accessed using Structure Object * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Create a structure object .. code-block:: c struct ABC abc; * Step 3 : Point single character pointer to single dimension array .. code-block:: c abc.ptr = a; * Step 4 : Iterate through single dimension array using pointer .. code-block:: c while (*abc.ptr) { char c; c = *abc.ptr++; printf("*ptr = %c\n", *abc.ptr); printf("c = %c\n", c); } * See full program below .. code-block:: c #include #include struct ABC { char *ptr; }; int main(void) { char a[7] = "Laptop"; struct ABC abc; abc.ptr = a; while (*abc.ptr) { char c; c = *abc.ptr++; printf("*ptr = %c\n", *abc.ptr); printf("c = %c\n", c); } return 0; } .. _post_incr_char_sp_ex_struct_ex_2: .. tab-set:: .. tab-item:: Char pointer accessed using Structure Single Pointer * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Allocate memory for structure pointers .. code-block:: c struct ABC *sp; sp = malloc(sizeof(struct ABC)); * Step 3 : Point single character pointer to single dimension array .. code-block:: c sp->ptr = a; * Step 4 : Iterate through single dimension array using pointer .. code-block:: c while (*sp->ptr) { char c; c = *sp->ptr++; printf("*ptr = %c\n", *sp->ptr); printf("c = %c\n", c); } * Step 5 : Free memory after use .. code-block:: c free(sp); * See full program below .. code-block:: c #include #include struct ABC { char *ptr; }; int main(void) { char a[7] = "Laptop"; struct ABC *sp; sp = malloc(sizeof(struct ABC)); sp->ptr = a; while (*sp->ptr) { char c; c = *sp->ptr++; printf("*ptr = %c\n", *sp->ptr); printf("c = %c\n", c); } free(sp); return 0; } .. _post_incr_char_sp_ex_struct_ex_3: .. tab-set:: .. tab-item:: Char pointer accessed using Structure Double Pointer * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Allocate memory for structure pointers .. code-block:: c struct ABC **dp; dp = malloc(sizeof(struct ABC *)); *dp = malloc(sizeof(struct ABC )); * Step 3 : Point single character pointer to single dimension array .. code-block:: c (*dp)->ptr = a; * Step 4 : Iterate through single dimension array using pointer .. code-block:: c while (*(*dp)->ptr) { char c; c = *(*dp)->ptr++; printf("*ptr = %c\n", *(*dp)->ptr); printf("c = %c\n", c); } * Step 5 : Free memory after use .. code-block:: c free(*dp); free(dp); * See full program below .. code-block:: c #include #include #include struct ABC { char *ptr; }; int main(void) { char a[7] = "Laptop"; struct ABC **dp; dp = malloc(sizeof(struct ABC *)); *dp = malloc(sizeof(struct ABC )); (*dp)->ptr = a; while (*(*dp)->ptr) { char c; c = *(*dp)->ptr++; printf("*ptr = %c\n", *(*dp)->ptr); printf("c = %c\n", c); } free(*dp); free(dp); return 0; } .. _post_incr_char_sp_ex_struct_ex_4: .. tab-set:: .. tab-item:: Char pointer accessed using Structure Triple Pointer * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Allocate memory for structure pointers .. code-block:: c struct ABC ***dp; dp = malloc(sizeof(struct ABC **)); *dp = malloc(sizeof(struct ABC *)); **dp = malloc(sizeof(struct ABC )); * Step 3 : Point single character pointer to single dimension array .. code-block:: c (**dp)->ptr = a; * Step 4 : Iterate through single dimension array using pointer .. code-block:: c while (*(**dp)->ptr) { char c; c = *(**dp)->ptr++; printf("*ptr = %c\n", *(**dp)->ptr); printf("c = %c\n", c); } * Step 5 : Free memory after use .. code-block:: c free(**dp); free(*dp); free(dp); * See full program below .. code-block:: c #include #include #include struct ABC { char *ptr; }; int main(void) { char a[7] = "Laptop"; struct ABC ***dp; dp = malloc(sizeof(struct ABC **)); *dp = malloc(sizeof(struct ABC *)); **dp = malloc(sizeof(struct ABC )); (**dp)->ptr = a; while (*(**dp)->ptr) { char c; c = *(**dp)->ptr++; printf("*ptr = %c\n", *(**dp)->ptr); printf("c = %c\n", c); } free(**dp); free(*dp); free(dp); return 0; } .. _post_incr_char_sp_ex_struct_ex_5: .. tab-set:: .. tab-item:: Char pointer accessed using Nested Structure Object * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Create a structure object .. code-block:: c struct ABC abc; * Step 3 : Point single character pointer to single dimension array .. code-block:: c abc.pqr.ptr = a; * Step 4 : Iterate through single dimension array using pointer .. code-block:: c while (*abc.pqr.ptr) { char c; c = *abc.pqr.ptr++; printf("*ptr = %c\n", *abc.pqr.ptr); printf("c = %c\n", c); } * See full program below .. code-block:: c #include #include struct PQR { char *ptr; }; struct ABC { struct PQR pqr; }; int main(void) { char a[7] = "Laptop"; struct ABC abc; abc.pqr.ptr = a; while (*abc.pqr.ptr) { char c; c = *abc.pqr.ptr++; printf("*ptr = %c\n", *abc.pqr.ptr); printf("c = %c\n", c); } return 0; } .. _post_incr_char_sp_ex_struct_ex_6: .. tab-set:: .. tab-item:: Char pointer accessed using Nested Structure Single Pointer * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Allocate memory for structure pointers .. code-block:: c struct ABC *sp; sp = malloc(sizeof(struct ABC)); * Step 3 : Point single character pointer to single dimension array .. code-block:: c sp->pqr.ptr = a; * Step 4 : Iterate through single dimension array using pointer .. code-block:: c while (*sp->pqr.ptr) { char c; c = *sp->pqr.ptr++; printf("*ptr = %c\n", *sp->pqr.ptr); printf("c = %c\n", c); } * Step 5 : Free memory after use .. code-block:: c free(sp); * See full program below .. code-block:: c #include #include #include struct PQR { char *ptr; }; struct ABC { struct PQR pqr; }; int main(void) { char a[7] = "Laptop"; struct ABC *sp; sp = malloc(sizeof(struct ABC)); sp->pqr.ptr = a; while (*sp->pqr.ptr) { char c; c = *sp->pqr.ptr++; printf("*ptr = %c\n", *sp->pqr.ptr); printf("c = %c\n", c); } free(sp); return 0; } .. _post_incr_char_sp_ex_struct_ex_7: .. tab-set:: .. tab-item:: Char pointer accessed using Nested Structure 2 level Pointers * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Allocate memory for structure pointers .. code-block:: c struct ABC *abc; abc = malloc(sizeof(struct ABC)); abc->pqr = malloc(sizeof(struct PQR)); * Step 3 : Point single character pointer to single dimension array .. code-block:: c abc->pqr->ptr = a; * Step 4 : Iterate through single dimension array using pointer .. code-block:: c while (*abc->pqr->ptr) { char c; c = *abc->pqr->ptr++; printf("*ptr = %c\n", *abc->pqr->ptr); printf("c = %c\n", c); } * Step 5 : Free memory after use .. code-block:: c free(abc->pqr); free(abc); * See full program below .. code-block:: c #include #include #include struct PQR { char *ptr; }; struct ABC { struct PQR *pqr; }; int main(void) { char a[7] = "Laptop"; struct ABC *abc; abc = malloc(sizeof(struct ABC)); abc->pqr = malloc(sizeof(struct PQR)); abc->pqr->ptr = a; while (*abc->pqr->ptr) { char c; c = *abc->pqr->ptr++; printf("*ptr = %c\n", *abc->pqr->ptr); printf("c = %c\n", c); } free(abc->pqr); free(abc); return 0; } .. _post_incr_char_sp_mt_5: .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Post Increment : Function Call * :ref:`*ptr++ : Function Call ` * :ref:`ptr++ : Function Call ` .. _post_incr_char_sp_call_by_value_ex_1: .. tab-set:: .. tab-item:: \*ptr++ : Function Call * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Define a single pointer and point to array .. code-block:: c char *ptr; ptr = a; * Step 3 : Iterate array using ptr++ and Pass by Value .. code-block:: c while (*ptr) { fun(*ptr++); } * Step 4 : Define a function ``fun`` which receives a character from caller .. code-block:: c void fun(char c) { printf("c = %c\n", c); } .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Let us Recall, * In case of ``*ptr++`` * Current value of ``*ptr`` is first assigned, then ``ptr`` incremented * Hence, in this case * Current value of ``*ptr`` is first passed to function ``fun``, then ``ptr`` incremented * See full program below .. code-block:: c #include #include void fun(char c) { printf("c = %c\n", c); } int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; while (*ptr) { fun(*ptr++); } return 0; } .. _post_incr_char_sp_call_by_value_ex_2: .. tab-set:: .. tab-item:: ptr++ : Function Call * Step 1 : Define a single dimension array .. code-block:: c char a[7] = "Laptop"; * Step 2 : Define a single pointer and point to array .. code-block:: c char *ptr; ptr = a; * Step 3 : Iterate array using ptr++ and Pass by Value .. code-block:: c while (*ptr) { fun(ptr++); } * Step 4 : Define a function ``fun`` which receives a character pointer from caller .. code-block:: c void fun(char *c) { printf("*c = %c\n", *c); } .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Let us Recall, * In case of ``ptr++`` * Current value of ``ptr`` is first assigned, then incremented * Hence, in this case * Current value of ``ptr`` is first passed to function ``fun``, then incremented * See full program below .. code-block:: c #include #include void fun(char *c) { printf("*c = %c\n", *c); } int main(void) { char a[7] = "Laptop"; char *ptr; ptr = a; while (*ptr) { fun(ptr++); } return 0; } .. card:: See Also * Current Module * :doc:`../post_incr_ptr` * Previous Module * :doc:`../../pre_incr_ptr/pre_incr_ptr` * Next Module * :doc:`../../pre_decr_ptr/pre_decr_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:`../../funcs_n_ptrs/funcs_n_ptrs` * :doc:`../../memcpy_ptr/memcpy_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:`../../post_decr_ptr/post_decr_ptr`