In C, swapping function parameters passed by value (pointers to string literals): what prints? #include<stdio.h> void swap(char *, char *); int main() { char *pstr[2] = {"Hello", "CuriousTab"}; swap(pstr[0], pstr[1]); printf("%s %s", pstr[0], pstr[1]); return 0; } void swap(char *t1, char *t2) { char *t; t = t1; t1 = t2; t2 = t; }

Difficulty: Medium

Correct Answer: Hello CuriousTab

Explanation:


Introduction / Context:
This assesses understanding of parameter passing in C. Even when pointers are involved, C passes arguments by value. Swapping local parameter copies does not change the caller's pointers.



Given Data / Assumptions:

  • pstr[0] → "Hello", pstr[1] → "CuriousTab".
  • swap receives copies of these two pointer values.
  • Inside swap, t1 and t2 are local; reassigning them does not affect the caller's array entries.


Concept / Approach:
To modify the caller's pointers, swap must receive addresses of the pointers (i.e., char **), or you must pass &pstr[0] and &pstr[1]. As written, only the local copies move around, and the caller remains unchanged.



Step-by-Step Solution:
Before call: pstr[0] = "Hello"; pstr[1] = "CuriousTab".swap(t1, t2): t1 and t2 are copies; t1 = t2; t2 = t swaps locals only.After return: pstr unchanged.printf prints original order on two lines: "Hello" then "CuriousTab".


Verification / Alternative check:
Change swap signature to void swap(char **t1, char *t2) and call swap(&pstr[0], &pstr[1]). Then dereference inside to swap caller's entries.



Why Other Options Are Wrong:
(a) would occur only if the caller's pointers were swapped. (b) is not what printf with %s prints. (d) is unrelated text. (e) There is nothing undefined here.



Common Pitfalls:
Assuming “pass by reference” because pointers are involved; forgetting that %s expects a char to a null-terminated string.



Final Answer:
Hello CuriousTab

Discussion & Comments

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