char arr[]={0}; //正確
char arr[]=" "; //正確
char arr[10]=" ";
char arr[10]; //正確
char arr[]; //錯誤
總結:數組若想表達無誤
1.初始化數組給不給大小均可以
2.若沒有初始化則必定要給出數組大小
~:~號是對一個數值按位取反
~0 (int型4個字節32個bit位)
=~00000000000000000000000000000000
= 11111111111111111111111111111111
=-1
//複數在內存中存儲的是二進制的補碼,最高位爲符號位0爲正1爲負
而打印的是這個數的原碼
計算公式:原碼符號位不變其他按位取反獲得反碼,反碼+1變成補碼
由於存儲爲補碼只須要上述過程逆序便可獲得原碼最終打印出來
11111111111111111111111111111111(補碼)-1
=11111111111111111111111111111110(反碼)符號位不變其他位按位取反
=1000000000000000000000000001(原碼)
=-1(輸出結果)
示例:
~5
=~00000000000000000000000000000101
=11111111111111111111111111111010(補碼)
=11111111111111111111111111111001(反碼)
=10000000000000000000000000000110(原碼)
=-6數組
++和--:
++i(先+) ++i(後加)
#include <stdio.h>ide
int main(){
int i=0;
printf("%d\n", i); //0
printf("%d\n", ++i); //1
printf("%d\n", i); //1
printf("%d\n", i++); //1
printf("%d\n", i); //2
return 0;
}
強制類型轉換:
int i = (int)3.14; //先後類型要一致
&& ||和 & |區別:
&&和||爲邏輯符號:
3&&2=1;
0&&2=0;
3||2=1;
3||0=1;
&和|爲計算符號:
3&2=0011&0010=0010=2
三目運算符:
(1)?(2):(3)//若(1)爲真那麼(2)若(1)爲假那麼(3)
num=(1<2)?1:2;//num爲1
例如:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 2;
(a == 2) ? (a = 4) : (a = 10);
printf("%d\n", a); //輸出爲4
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 3;
(a == 2) ? (a = 4) : (a = 10);
printf("%d\n", a); //輸出爲10
return 0;
}函數
用法:
register int a = 10; //建議把a定義成寄存器變量(寄存器運行速度快遠大於內存)建議是由於寄存器空間有限須要選擇繼承
如定義一個無符號整型變量:
unsigned int num = 10;
可是感受unsigned int 太長了,太麻煩了能夠使用typedef重定義
用法:
typedef unsigned int u_int;//這樣就把unsigned int 變成 u_int
unsigned int num = 10;等價於u_int num=10;
注意:
新定義的必定是一個單詞 u_int 不能夠是 u int (兩個單詞)內存
將一個變量或函數變爲靜態
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void test(){
int a = 10;
++a;
printf("%d\n", a);
}
int main()
{
int i = 0;
while (i < 5){
test();
++i;
}
return 0;
}
結果爲五個11
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void test(){
static int a = 10;
++a;
printf("%d\n", a);
}
int main()
{
int i = 0;
while (i < 5){
test();
++i;
}
return 0;
}
結果爲11 12 13 14 15
結論:當static修飾局部變量時此變量週期變長了
即在此調用函數時此變量的值不變不會被從新初始化it
用法:
extern int a;//a爲其餘.c文件的全局變量(static修飾全局變量)
但若此時a爲static int a = 10;則其餘文件中主函數就不能不能extern(繼承)這個外部變量。
static修飾函數也同樣和變量同樣。
extern聲明外部函數:
extern int hanshu(int , int);//在哪裏聲明都行只要在調用前,main裏外都行。io
#define MAX 100(常量)
#define MAX(X,Y) ((X>Y)?X:Y)(宏)//MAX(X,Y)就等價於後邊的三目運算表達式且不須要規定參數類型class