C语言——总结遇到XX面试题

面试题1:

gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)

一下子懵逼了。。再使用一段代码

还是不方便看,改写一下

可以推测到求值顺序是从右至左,输出顺序从左到右。但加一个不求值的,好像又不一样了。

同时使用面试题:

	.file	"test1.c"
	.section	.rodata
.LC0:
	.string	"a++ = %d,a = %d,a++ = %d,\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	$10, -4(%rbp)
	movl	-4(%rbp), %edx
	leal	1(%rdx), %eax @
	movl	%eax, -4(%rbp)
	movl	-4(%rbp), %eax
	leal	1(%rax), %ecx
	movl	%ecx, -4(%rbp)
	movl	-4(%rbp), %esi
	movl	%edx, %ecx
	movl	%esi, %edx
	movl	%eax, %esi
	movl	$.LC0, %edi
	movl	$0, %eax
	call	printf
	movl	$0, %eax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609"
	.section	.note.GNU-stack,"",@progbits

以后在做研究...

 

1、printf,求值与输出顺序不一样就。

2、a++:先赋值再+,++a:先计算a再赋值

http://c.biancheng.net/cpp/html/33.html

求值顺序虽是自右至左,但是输出顺序还是从左至右,因此得到的结果是上述输出结果。

不同编译器不一样:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值