1、i++類
int i = 1 ,j =2;
int k = i+++j;
cout<<k<<endl;//輸出的值為3,因為首先結合i++
2、x=x+1,x+=1,x++的運作效率問題
其中x++最快,x+=1次之,x=x+1最慢(影響的主要因素是讀取x位址的次數和指派)
3、
#define product(x) (x*x)
int main(){
int i = 3,j,k;
j = product(i++);
k = product(++i);
cout<<j<<endl; //結果為9
cout<<k<<endl; //結果為49而非25,因為product(i++)=i++*i++;
}
4、類型轉換
char foo(void){
unsigned int a = 6;
int b = -20;
char c ;
(a+b>6)?(c=1):(c=0);
return c;
//c的結果是1二并不是0,因為unsigned int 類型的資料與int類型的資料相運算後,自動轉化成
//unsigned int 類型的,是以a+b的結果并不是-14,而是一個unsigned int 類型的數4294967382
}
5、優先級
#include<stdio.h>
void main(){
int a = 5;
int b = 4,c = 3;
a-=b-c;
printf("%d\n",a);//輸出結果為4二不是-2,先計算b-c
}
6、不用if,switch,"? :"或其他判斷語句求兩個數的最大值
#include<stdio.h>
#include<stdlib.h>
void main(){
int a =3;
int b =10;
printf("%d",((a+b)+abs(a-b))/2);
}
7、不使用中間變量交換a,b的值
#include<stdio.h>
#include<stdlib.h>
void main(){
int a =3;
int b =10;
a = a^b;
b = a^b;
a = a^b;
printf("%d%d",a,b);
}
8、在main函數執行過後在執行一段代碼
如果需要加入一段在main函數退出後執行的代碼,可以使用atexit()函數注冊一個函數
#include<stdlib.h>
int atexit(void (*function)(void));
#include<stdio.h>
void fn1(){
printf("second\n");
}
void fn2(){
printf("third\n");
}
void main(){
atexit(fn1);
atexit(fn2);
printf("this id excute first\n");
}