之前学习的时候碰到的问题,后来解决了,就没放在心上,不过发现这是道面试题,就拿出来和大家分享.
下面的代码输出a等于多少呢?
- #include <stdio.h>
- int main()
- {
- int a = 0;
- a = a++;
- printf("%d\n",a);
- return 0;
- }
复制代码
答案是0(之前一直以为是1);
答案分析:1.a++表达式是先用后加,故表达式的值为0;
2.取出a++表达式的值后,执行++操作,a变成1;
3.将之前取出来的a++表达式的值(即0)赋值给a,a变成0;
大概看的懂汇编的,可以看看计算机具体怎么运行的
(xcode,菜单栏Debug->Debug Workflow->Always Show Disassembly选中后,打断点运行就可以看到汇编代码啦!!)
- 0x100000f46: movl $0x0, -0x8(%rbp)
- 0x100000f4d: movl -0x8(%rbp), %eax
- 0x100000f50: movl %eax, %ecx
- 0x100000f52: addl $0x1, %ecx
- 0x100000f58: movl %ecx, -0x8(%rbp)
- 0x100000f5b: movl %eax, -0x8(%rbp)
复制代码 |
|