I was working on pointers. I saw a code snippet but I couldn't understand how it works.
The strange thing is that when the k
function is executed, the expression y = 2
doesn't seem to work. Because the output is y = 1
instead of y = 2
.
Any idea about this?
#include<stdio.h>
void k(void){
int x;
*(&x 5) = 7;
}
void main(void){
int y = 1;
y = 1;
k();
y = 2;
printf("y = %d", y);
}
CodePudding user response:
There is undefined behavior (UB) on the *(&x 5) = 7;
line. When there is UB, the program can do anyting including formatting your hard drive and outputting y=1
.
To learn what is happening under the hood, you can check the assembly output.
CodePudding user response:
The function k()
invokes undefined behaviour.
This is because first you declare a local variable x
. After this you try to add 7
to the address &x 5
which goes past the end of x
.
The strange thing is that when the k function is executed, the expression y = 2 doesn't seem to work
y
is a local variable in main()
so calling k()
won't have any affect on it.