@aarati
Yes, you are correct .
here p is a pointer variable like int *p and p = a is performed.
p holds the address of a[0], and a[0] would hold the contents at the location.
For option A)
p == a[0] is illegal as p is a pointer variable and holds an address .and a[0] represents the 1st element of array.
so option A is illegal.
For option B and C , both are legal , correct comparison is p == &a[0], since &a[0] would yield a pointer that points to first element of 'a'.
And *p pointing the value holds by a[0] .
For option D) it is also legal.
p[0] == a[0] is correct and true since in this case both the expressions p[0] and a[0] yield the content of the first element of array a.