Const qualifier on the pointed-to data: diagnose the error when writing through a pointer to const\n\n#include<stdio.h>\n\nint main()\n{\n char mybuf[] = "India";\n char yourbuf[] = "CURIOUSTAB";\n char const ptr = mybuf; / pointer to const char */\n ptr = 'a'; / attempt to modify through const-qualified pointer /\n ptr = yourbuf; / re-pointing is allowed */\n return 0;\n}

Difficulty: Easy

Correct Answer: None of above

Explanation:


Introduction / Context:
This problem checks understanding of “pointer to const” versus “const pointer.” Here, ptr is declared as char const *ptr, which means the characters pointed to must not be modified through ptr. The pointer itself is not const and may be reassigned.



Given Data / Assumptions:

  • mybuf and yourbuf are writable arrays.
  • ptr is a pointer to const char.
  • The code tries *ptr = 'a' which attempts to modify via a const-qualified access.


Concept / Approach:
With char const *ptr, the pointed-to data is read-only through ptr. Writing via *ptr is a constraint violation. Reassigning ptr = yourbuf is fine because ptr itself is not const. The precise error is “assignment of read-only location.” None of the provided choices (a, b, c) correctly name this, so “None of above” is the accurate selection.



Step-by-Step Solution:
Declare ptr as pointer to const.Attempt *ptr = 'a'; → compile-time error: expression must be modifiable lvalue / read-only location.Line ptr = yourbuf; → valid reassignment.


Verification / Alternative check:
Change the declaration to char *ptr = mybuf; and the assignment will compile and run. Alternatively, change to char *const ptr = mybuf; to make the pointer itself const and observe that ptr = yourbuf; then fails.



Why Other Options Are Wrong:
(a) and (b) mention conversions not present. (c) claims no error, which is incorrect due to the attempted write through a const-qualified pointer.



Common Pitfalls:
Confusing char const * (data const) with char *const (pointer const); believing that writable arrays remove const restrictions imposed by a pointer type.



Final Answer:
None of above

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion