C語言課程心得(五)

數組基本常識

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>

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關鍵字

用法:
register int a = 10; //建議把a定義成寄存器變量(寄存器運行速度快遠大於內存)建議是因爲寄存器空間有限需要選擇

typedef關鍵字(類型定義/類型重定義)

如定義一個無符號整型變量:
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 (兩個單詞)






static關鍵字

將一個變量或函數變爲靜態
#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修飾局部變量時此變量週期變長了
即在此調用函數時此變量的值不變不會被重新初始化



































extern函數

用法:
extern int a;//a爲其他.c文件的全局變量(static修飾全局變量)
但若此時a爲static int a = 10;則其他文件中主函數就不能不能extern(繼承)這個外部變量。
static修飾函數也一樣和變量一樣。
extern聲明外部函數:
extern int hanshu(int , int);//在哪裏聲明都行只要在調用前,main裏外都行。




define定義常量和宏

#define MAX 100(常量)
#define MAX(X,Y) ((X>Y)?X:Y)(宏)//MAX(X,Y)就等價於後邊的三目運算表達式且不需要規定參數類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章