23,120
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
static int *p = NULL;
static int x = 0;
int add(void)
{
int i = 0;
p = &i;
return i++;
}
int
main(int argc, char *argv[])
{
int r;
r = add();
x = *p;
printf("r=%d\n", r);
printf("x=%d\n", x);
return 0;
}
[/quote]
十分同意你的解释 我的问题是 程序执行了一句无关的代码 并且 是做了i++ 这个动作 这个动作照我们的理解应该是在ret后 发生 但是现在 在ret前发生了 ????
add:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $0, -4(%ebp)
movl -4(%ebp), %eax /* -4(%ebp) 就是 i 的地址,这里把 i 的值装入 %eax, 作为函数返回值 */
addl $1, -4(%ebp) /* i 的值加 1 */
leave
ret
.size add, .-add
#include <stdio.h>
static int *p = NULL;
static int x = 0;
int add(void)
{
int i = 0;
p = &i;
return i++;
}
int
main(int argc, char *argv[])
{
int r;
r = add();
x = *p;
printf("r=%d\n", r);
printf("x=%d\n", x);
return 0;
}