在這里學習了C中的自增和自減,但是后面學習了前綴和后綴及其混合之后,發現使用不同的編譯器,其中的規則是不一樣的,而且平時我們書寫程序的時候也不會寫這樣復雜的代碼,例如i+++i+++i++等,這樣一方面在可讀性方面很差,另一方面就是在移植性方面,不同的編譯器就會出現不同的結果,所以這樣寫是不理想的。
~~~
#include <stdio.h>
/**
* 自增/自減運算的應用
* @brief main
* @return
*/
int main(void)
{
int a = 5,b,c,i = 10;//變量定義及初始化
//將a賦值給b,然后自增1
b = a++; //b = 5,a = 6
//b先自增1,然后賦值給c
c = ++b; //b = 6,c = 6
printf("a = %d,b = %d,c = %d\n",a,b,c); //a=6,b=6,c=6
/**
* C函數參數的入棧順序是從右向左的
* 主要是為了支持參數可變長度
* 則下面的輸出為12,11,10
*/
printf("i,i++,i++ = %d,%d,%d\n",i,i++,i++); /**輸出i,i++,i++**/
printf("%d\n",++i); //i自增1,然后輸出i 13 i=13
printf("%d\n",--i); //i自減1,然后輸出i 12 i=12
printf("%d\n",i++); //先輸出i,然后i自增1 12 i=13
printf("%d\n",i--); //先輸出i,然后i自減1 13 i=12
printf("%d\n",-i++); //i先取負,然后輸出i,最后i自增1 -12 i=13
printf("%d\n",-i--); //i先取負,然后輸出i,最后i自減1 -13 i=12
/**
* 有關于自增/自減問題的總結
*/
/*******************/
/* 1:表達式中,一般情況下,是從左向右 */
/* 函數參數中,運算方向是從右向左 */
/******************/
/*******************/
/* 2:后綴,先取值,再自增 */
/******************/
//例子
int m = 5,n;
n = m+++m+++m++; //相當于a=(m++) + (m++) + (m++);
//但由于是后綴,則先取值運算之后,在進行自增
//所以 n = m + m + m; m++; m++; m++;
//所以最后結果 n=15,m=8
printf("n = %d,m = %d",n,m);
/*******************/
/* 3:前綴,前兩個自增后取值 */
/* 后面的每個自增后都取值 */
/******************/
//例子
int p,j=5;
p = ++j + (++j) + (++j);
//則根據規則,前兩個自增之后再取值
//則變化之后 j=7 p = 7 + 7 + (++j);
//兩個之后的所有前綴每一個都先自增接著取值
//則 j = 8, p = 7 + 7 +8;
// p = 22, j = 8
printf("p = %d,j = %d",p,j);
/*******************/
/* 4:前綴,后綴混合情況 */
/******************/
//學到這里我發現這個編譯器不同,最后的結果也是不一樣的,所以感覺很沒有意義
return 0;
}
~~~
- 前言
- 實例一:HelloWorld
- scanf函數學習
- 實數比較
- sizeof()保留字獲取類型的大小
- 自增/自減學習
- C學習if條件判斷和for循環
- C實現的九九乘法表
- C實現一個比較簡單的猜數游戲
- 使用C模擬ATM練習switch..case用法
- 記錄一個班級的成績練習一維數組
- C數組實現矩陣的轉置
- C二維數組練習
- 利用數組求前n個質數
- C實現萬年歷
- C實現數組中元素的排序
- C實現任意進制數的轉化
- C判斷一個正整數n的d進制數是否是回文數
- C使用遞歸實現前N個元素的和
- 鋼材切割問題
- 使用指針比較整型數據的大小
- 指向數組的指針
- 尋找指定元素
- 尋找相同元素的指針
- 整數轉換成羅馬數字
- 字符替換
- 從鍵盤讀入實數
- C實現字符行排版
- C實現字符排列
- C實例--判斷一個字符串是否是回文數
- 通訊錄的輸入輸出
- 撲克牌的結構定義
- 使用“結構”統計學生成績
- 報數游戲
- 模擬社會關系
- 統計文件中字符個數
- C實現兩個文件的內容輸出到同一個屏幕