C program Strings Example how come the result is 98?
#include <stdio.h>
int main()
{
char s[]="%d%d%d";
int a=9,b=8,c=5;
printf(s+2,a,b,c);
return 0;
}
C program Strings Example how come the result is 98?
#include <stdio.h>
int main()
{
char s[]="%d%d%d";
int a=9,b=8,c=5;
printf(s+2,a,b,c);
return 0;
}
Expression s+2
speaking in images moves pointer s (in expressions array designators are converted to pointers to their first elements) two positions to the right. So the format string in the printf statement will look like
"%d%d"
because expressiom s+2
points to the third character of string "%d%d%d"
As result statement
printf(s+2,a,b,c);
will output only two first arguments a and b because the pointed substring contains only two format specifiers and you will get
98
If for example you would use expression s + 4
in the printf
call you would get only
9
string + x
is an operation called Pointer Arithmetic. That way you are providing reference to a mathematically calculated memory area and by semantics it is equivalent to&string[x]
What actually happens behind the calculation:(&string + (x * sizeof(*string)))
which is why it is a very specific notion when it is applied to pointers. That stands for Arrays as well as they decay to a pointer to the first element after all.As for your code, you have the following string:
And is passed as the format string for printf, two bytes afterwards, which explicitly provides reference to
"%d%d"
Therefore this:
Is later parsed as:
printf will except two integers to read from and the 3rd one will be simply - ignored.