Всем привет. Есть такой кусок Сишного кода:
#include <stdio.h>
void reset(int *x)
{
x=0;
}
int main()
{
int x=1;
reset(&x);
printf("x is now 0.\n");
return 0;
}
на первом фрейме получаю такое:
0x0000000000400539 <+0>: push %rbp
0x000000000040053a <+1>: mov %rsp,%rbp
0x000000000040053d <+4>: sub $0x10,%rsp
=> 0x0000000000400541 <+8>: movl $0x1,-0x4(%rbp)
0x0000000000400548 <+15>: lea -0x4(%rbp),%rax
0x000000000040054c <+19>: mov %rax,%rdi
0x000000000040054f <+22>: callq 0x400526 <reset>
присваиваем x 1 (очевидно):
x/d $rbp-4
0x7fffffffdabc: 1
p/x $rdi
$3 = 0x7fffffffdabc
0x0000000000400526 <+0>: push %rbp
0x0000000000400527 <+1>: mov %rsp,%rbp
0x000000000040052a <+4>: mov %rdi,-0x8(%rbp)
=> 0x000000000040052e <+8>: movq $0x0,-0x8(%rbp)
0x0000000000400536 <+16>: nop
0x0000000000400537 <+17>: pop %rbp
0x0000000000400538 <+18>: retq
Я не понимаю почему именно так? Я думал, что если x = 0 внутри reset(), то по сути он и должен указывать на 0x0 после выхода из reset().