自增自減
簡單的使用i++
不會產(chǎn)生什么問題怒竿,比較麻煩的是使用變量與變量自增(自減)混在一起的時候,下面是關(guān)于這個問題的分析。
// 自增自減寫在變量前后的區(qū)別
// 如果++寫在變量的前面,則會先將變量自增弃锐,再用自增后的結(jié)果參與運算
// 如果++寫在變量的后面,則會先將變量的值參與運算三热,再將變量自增
// 自減與自增一樣
int a = 10; // a -> 10
int b = a++; // b -> 10 a -> 11
int c = ++a; // c -> 12 a -> 12
printf("a --> %i\n", a); // a --> 12
printf("b --> %i\n", b); // b --> 10
printf("c --> %i\n", c); // c --> 12
int a = 10; // a --> 10
// int b = (a++) + (++a); // a --> 12 b --> 22
// int b = (a++) + (a++); // a --> 12 b --> 21
int b = (++a) + (++a); // a --> 12 b --> 23
---------------------
作者:crazy_zhangcong
來源:CSDN
原文:https://blog.csdn.net/crazy_zhangcong/article/details/87916766
版權(quán)聲明:本文為博主原創(chuàng)文章念祭,轉(zhuǎn)載請附上博文鏈接!
指針變量
指針變量進行自增自減時启上,其指向位置邢隧。
獲取字符串的長度
#include <stdio.h>
#define MAX 1024
int main()
{
char str[MAX];
char *target = str;
int length = 0;
printf("請輸入一個字符串:");
fgets(str, MAX, stdin);
while (*target++ != '\0')
{
length++;
}
printf("您總共輸入了 %d 個字符!\n", length - 1); // 注意length -1
return 0;
}
注意: fgets 函數(shù)會把換行符('\n')也一并讀取進去冈在。
考慮一種簡單地情況倒慧,字符串str
只有一個字符。
第一次循環(huán):
- 自增的優(yōu)先級高于取值運算符,執(zhí)行
target++
纫谅。前面寫到炫贤,如果++寫在變量的后面,則會先將變量的值參與運算付秕,再將變量自增兰珍,則實際上語句*target++
相當(dāng)于執(zhí)行*target;
,此時target →(指向) <首地址>询吴,因為有一個字符俩垃,所以判斷為真,判斷完后汰寓,執(zhí)行target
口柳,指針位置加一,此時target →(指向) <第二個元素地址> - 進入循環(huán)體有滑。
- 循環(huán)體內(nèi)length加一跃闹。
第二次循環(huán):
- 根據(jù)先使用后自增的原則,執(zhí)行判斷語句時毛好,指針指向第二個元素'\n'(前面提到望艺,fgets函數(shù)會把回車也讀進來),判斷為真肌访,然后指針加一找默,進入循環(huán)體。
- 循環(huán)體結(jié)束后吼驶,length = 2惩激。
第三次循環(huán):
- 此時指針指向'\0',判斷為假蟹演,不執(zhí)行循環(huán)體风钻,打印結(jié)果。由于多計算了'\n'酒请,因此在printf的時候要減去骡技。