Machine-translated by Google. Questions are authored in English.
Top

Discussion

What will be the output of the following C code?

#include <stdio.h>
    int main()
    {
        int i = 10;
        int *const p = &i;
        foo(&p);
        printf("%d\n", *p);
    }
    void foo(int **p)
    {
        int j = 11;
        *p = &j;
        printf("%d\n", **p);
    }

 

  • A.11 11
  • B.Undefined behaviour
  • C.Compile time error
  • D.Segmentation fault/code-crash

Answer: A

Correct answer: 11 11

In main, int *const p makes the pointer itself const, so &p has type int *const *. Passing that to a parameter of type int ** discards the qualifier, which is a constraint violation - but compilers generally warn rather than refuse, so the program runs.

foo then writes through the pointer, redirecting main's p to j, and both prints show 11. The exercise illustrates that const can be circumvented through a pointer conversion the compiler only warns about.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.