Work with an array of structs and pointer arithmetic on arrays. What output is produced by accessing c[1].courseno and (*(c + 2)).coursename in the code below? #include<stdio.h> int main() { struct course { int courseno; char coursename[25]; }; struct course c[] = { {102, "Java"}, {103, "PHP"}, {104, "DotNet"} }; printf("%d ", c[1].courseno); printf("%s\n", (*(c+2)).coursename); return 0; }

Difficulty: Easy

Correct Answer: 103 DotNet

Explanation:


Introduction / Context:
This problem checks understanding of array indexing with structs and pointer arithmetic on arrays of structs.


Given Data / Assumptions:

  • c is an array with three elements: {102,"Java"}, {103,"PHP"}, {104,"DotNet"}.
  • We print c[1].courseno and then (*(c+2)).coursename.


Concept / Approach:
c[1] indexes the second struct in the array. c + 2 points to c[2], and *(c + 2) dereferences that element. Accessing fields then prints the stored number and string.


Step-by-Step Solution:

c[1].courseno = 103 *(c + 2) is c[2]; c[2].coursename = "DotNet" Output: "103 DotNet"


Verification / Alternative check:
Rewriting (*(c+2)).coursename as c[2].coursename yields the same result by array indexing equivalence.


Why Other Options Are Wrong:

  • 102 Java: That would be c[0], not the requested elements.
  • 103 PHP: Mixes first value from c[1] with coursename from c[1] instead of c[2].
  • 104 DotNet: Would require printing c[2].courseno, not c[1].courseno.


Common Pitfalls:
Off-by-one mistakes when moving between zero-based indexing and pointer arithmetic (c + n vs c[n]).


Final Answer:
103 DotNet

More Questions from Structures, Unions, Enums

Discussion & Comments

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