printf函数输出多个printf 、前置加加或者后置加加

本文详细解析了前置加加和后置加加的区别,包括它们在编译器中的实现方式,以及如何使用printf函数输出这两种运算符的结果。通过具体的代码示例,深入理解这两种运算符的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

(1)前置加加和后置加加的区别

(2)printf输出前置加加

(3)printf输出后置加加

(4)printf输出printf


(1)前置加加和后置加加的区别

首先我们先来了解一下前置加加和后置加加的区别。

前置加加在编译器里的操作

//++a
int a = 0;
a = a + 1;
return a;

前置加加是先加一,后赋值,返回的值是加一之后的值。

后置加加在编译器里的操作

//a++

int a = 0;
tmp = a;
a = a + 1;
return tmp;

 后置加加是先把值赋给临时量,然后再加一,返回的值是临时量的值。

前置加加可以做左值,因为前置加加返回的是a的值,是可以进行操作的,后置加加则不可以,因为后置加加返回的是一个临时量,并不是程序中定义的可寻址变量,不能通过地址对temp进行操作。


(2)printf输出前置加加

#include<stdio.h>

int main()
{
	int i = 1;
	printf("%d,%d\n",++i,++i);
    return 0;
}

printf函数计算参数的时候是从右往左压栈的。目的是为了计算参数的个数。编译器首先从右往左计算各参数的值,再进行压栈操作,最右端的"++i"的值是计算出来是2,保存在eax寄存器中,接着计算倒数第二个"++i"的值,给eax寄存器加一,保存为3,然后进行压栈,把eax寄存器里的i的地址放入栈中,此时输出的值是i的值,所以都是3.


(3)printf输出后置加加

#include<stdio.h>

int main()
{
	int i = 1;
	printf("%d,%d\n",i++,i++);
    return 0;
}

最右端的"i++"的值为1,保存在临时量里,计算出i的值为2,倒数第二个"i++"的值为2,i的值为3,"i++"也保存在对应的临时量里,但是两个临时量保存的地址是不同的,进行压栈操作,压入的是保存两个临时量的地址,所以输出的是2和1.

汇编指令:


(4)printf输出printf

#include<stdio.h>

int main()
{
	int i = 33;
	printf("%d\n",printf("%d ",printf("%d ",i)));
    return 0;
}

首先输出的第一个"33"是"i"的值,第二个"%d"算出来的是"33"的值的字节大小,占两个字节,还有空格的字节长度,一共是三个字节,所以输出的是"3",第三个"%d"算出来的是"3"的值的字节大小,占一个字节,还有空格的字节长度,一共是两个字节,所以输出的是2。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值