1) char s[]={'a','b','c','\n','c','\0'};
by this line s is array of characters created at location 100 ( assume)
'a' |
'b' |
'c' |
'\n' |
'c' |
'\n' |
100 |
101 |
102 |
103 |
104 |
105 |
2) char *p,*str,*str1;
by this line you are declaring p is pointer to character, str is pointer to character, str1 is pointer to character
3) p=&s[3];
by this line p is get value as memory address of 3rd index of s ===> p = 103
4)str=p;
by this line str also get value as memory address of 3rd index of s ===> str = 103
5) str1=s;
by this line str1 get value as memory address of 0th index of s ===> str1 = 100
6) ++*p+++*str1-32 =====> (++*p+++*str1) - ( 32 ) =====> ( (++ ( * (p ++) ) ) + ( * str1) ) - ( 32 )
p is post increment ===> no change in that statement ===> p=103 ===> *p = value at 103 ==> '\n'
(++ ( * (p ++) ) ===> increment the value = '\n' + 1 ===> ascii value of '\n' +1 = 10+1 =11
(++*p+++*str1) - ( 32 ) = 11 + 'a' - 32 ===> 11+97-32 = 108 - 32 = 76