1)

1. const char *a;

2. char* const a;

3. char const *a;

-Differentiate the above declarations.

1. 'const' applies to char * rather than 'a' ( pointer to a constant char )

*a='F' : illegal

a="Hi" : legal

2. 'const' applies to 'a' rather than to the value of a (constant pointer to char )

*a='F' : legal

a="Hi" : illegal

3. Same as 1.

2)

1 10

The expression can be written as i=(i&=(j&&10)); The inner expression (j&&10) evaluates to 1 because j==10. i is 5. i = 5&1 is 1. Hence the result.

3)

4 1

The boolean expression needs to be evaluated only till the truth value of the expression is not known. j is not equal to zero itself means that the expression’s truth value is 1. Because it is followed by || and true || (anything) => true where (anything) will not be evaluated. So the remaining expression

is not evaluated and so the value of i remains the same. Similarly when && operator is involved in an expression, when any of the operands become false, the whole expression’s truth value becomes false

and hence the remaining expression will not be evaluated. false && (anything) => false where (anything) will not be evaluated.

4)

Compier Error: '&' on register variable

5)

Compiler Error: switch expression not integral

Switch statements can be applied only to integral types.

1. const char *a;

2. char* const a;

3. char const *a;

-Differentiate the above declarations.

*Answer:*1. 'const' applies to char * rather than 'a' ( pointer to a constant char )

*a='F' : illegal

a="Hi" : legal

2. 'const' applies to 'a' rather than to the value of a (constant pointer to char )

*a='F' : legal

a="Hi" : illegal

3. Same as 1.

2)

main(){ int i=5,j=10; i=i&=j&&10; printf("%d %d",i,j); }

*Answer:*1 10

**Explanation:**The expression can be written as i=(i&=(j&&10)); The inner expression (j&&10) evaluates to 1 because j==10. i is 5. i = 5&1 is 1. Hence the result.

3)

main() { int i=4,j=7; j = j || i++ && printf("YOU CAN"); printf("%d %d", i, j); }

*Answer:*4 1

**Explanation:**The boolean expression needs to be evaluated only till the truth value of the expression is not known. j is not equal to zero itself means that the expression’s truth value is 1. Because it is followed by || and true || (anything) => true where (anything) will not be evaluated. So the remaining expression

is not evaluated and so the value of i remains the same. Similarly when && operator is involved in an expression, when any of the operands become false, the whole expression’s truth value becomes false

and hence the remaining expression will not be evaluated. false && (anything) => false where (anything) will not be evaluated.

4)

main() { register int a=2; printf("Address of a = %d",&a); printf("Value of a = %d",a); }

*Answer:*Compier Error: '&' on register variable

& (address of ) operator cannot be applied on register variables.

5)

main() { float i=1.5; switch(i) { case 1: printf("1"); case 2: printf("2"); default : printf("0"); } }

*Answer:*Compiler Error: switch expression not integral

**Explanation:**Switch statements can be applied only to integral types.