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

Discussion

What is the output of the code below?

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

int *const p in main makes p a constant pointer, but the address of it is passed to a function taking a plain int **, which discards the qualifier. That is a constraint violation and a conforming compiler must diagnose it, though most treat it as a warning and compile. The code then modifies p through the unqualified pointer and both prints give 11 - which is precisely why the warning matters.

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

Post your comment

Please log in or register to post a comment.