1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言中i++与++i的区别

c语言中i++与++i的区别

时间:2022-12-16 23:03:31

相关推荐

c语言中i++与++i的区别

1、for循环条件中i++与++i的区别

//for循环体语法for(语句1;语句2;语句3){循环体执行代码块}

语句1是在循环体开始前执行

语句2是定义运行循环体的条件

语句3在循环体 已经被执行之后来执行

根据for循环的语法定义 ,在语句3执行时++i和i++的结果是一样的,都需要等代码块执行完毕之后才能运行语3。++i:执行完代码块后执行i=i+1,此时i的值增加了1;i++:先引用i=i,再执行i=i+1,也相当于执行代码块后实现了i自增1。

性能区别:在大量数据的时候++i的性能要比i++性能要好。i++由于是需要在使用当前值之后再+1,所以会需要一个临时的变量来进行转存。而++i则是直接进行+1的操作,省去了对内存的操作环节,所以能够提高性能。

2、数组中i++与++i的区别

// 有整型数组如下array[i++]array[++i]//array[i++]执行次序:先取array[i],后i=i+1//array++i执行次序:先i=i+1,再取array[i]

区别:array[i++]中i++是后自增,必须先使用数组当前元素的值,再i自增1。因此返回的结果是i对应的数组中的值

array[++i]中++i是前自增,先i自增,再取i自增后的数组中的值。因此返回结果是i自增后对应的数组中的值

3、指针中i++与++i的区别

(1)第一种

*(i++)与*i++//*i++//等价于*(i++)//分2步执行:*i; i=i+1;//*(i++)//分2步执行:*(i); i=i+1;

因此这两种情况等价:先输出指针i在自增前对应的值,然后指针i自增,指针指向下一个地址。返回的结果是i指针自增前对应的值

(2)第二种

*(++i)与*++i//*(++i)//分两步执行:i=i+1;*(i)//*++i//等价与*(++i)//分两步执行:i=i+1;*i

因此这两种情况等价:都先将i自增1,然后与*结合,再取对应地址的值。返回的结果是原i指针指向地址的下一个地址的值

(3)第三种

++*i 与 ++(*i)//++*i//等价与++(*i)//分两步执行:*i;然后对其值自增1//++(*i)//分两步执行:*i;然后对其值自增1

因此这两种情况等价:先取i指针对应的值,然后对值自增1。返回的结果应该是自增后的值

(4)第四种

(*i)++//分两步执行:先取i对应地址的值,再将其值整体自增1

因此这种情况:因为括号结合率最高,因此先取i对应地址的值,再将其值自增1。返回的结果应该是i对应地址的值

注:后缀++与*优先级相同结合率从右至左

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。