Assigning (String + Integer) to Variable : C Programming
In this typical question we are assigning (String + Integer) to variable of type character pointer. In this case starting address of the substring will be returned as a result.
Assigning (String + Integer) to Variable
Now guess the output of the following program
#include<stdio.h> int main() { char *str = "CProgramming"; printf("\n%s", str + 0); printf("\n%s", str + 1); printf("\n%s", str + 2); printf("\n%s", str + 3); printf("\n%s", str + 4); printf("\n%s", str + 5); printf("\n%s", str + 6); printf("\n%s", str + 7); printf("\n%s", str + 8); printf("\n%s", str + 9); printf("\n%s", str + 10); printf("\n%s", str + 11); return(0); }
Output :
CProgramming Programming rogramming ogramming gramming ramming amming mming ming ing ng g
Explanation
*str
is pointer variable which is used to store the address of the character. In this example we have assigned the starting address of the string
lets assume the starting address of the string ‘CProgramming’ is 2000 then we can say following things -
Expression | Return address | Printed String |
---|---|---|
str + 0 |
2000 | CProgramming |
str + 1 |
2001 | Programming |
str + 2 |
2002 | rogramming |
str + 3 |
2003 | ogramming |
str + 4 |
2004 | gramming |
str + 5 |
2005 | ramming |
str + 6 |
2006 | amming |
str + 7 |
2007 | mming |
str + 8 |
2008 | ming |
str + 9 |
2009 | ing |
str + 10 |
2010 | ng |
str + 11 |
2011 | g |
Expression evaluation
Lets discuss how we obtain the output string when we print the expression containing sum of pointer and string
str
is pointer variable so address stored in thestr
would be address of character. i.e address of character'C'
in “CProgramming” string- Initially value present inside the pointer variable is 2000.
As per pointer arithmetic -
str + 2 = (Starting address of 'str') + 2 * (Size of data type) = (Starting address of 'str') + 2 * (Size of character) = 2000 + 2 * 1 = 2000 + 2 = 2002
Recommended Article : Pointer arithmetic and Pointer addition
So we can say that str + 2
will return us address 2002 which is address of character 'r'
so whenever we print a string using str + 2
, we start printing the string from 'r'
Anonymous string + integer
#include<stdio.h> int main() { char *str = 1 + "CProgramming"; printf("\n%s",str + 0); printf("\n%s",str + 1); return(0); }
Output :
Programming rogramming
While assigning the value to pointer we have added the integer value with the string. In this case CProgramming
is written inside the double quotes so anonymous pointer will have starting address of string CProgramming
.
char *str = 1 + "CProgramming";
would assign the address of 'P'
to the pointer variable instead of character 'C'
.