做了三年的FPGA了,感慨良多。最大的失誤是沒有做好一個系統的記錄。我的C旅程即將開始,一定要做一個系統的記錄。學了兩週的c,寫了一個簡單學習總結
C程式主要包含5部分
預處理指令(通過#標識)
函數
變數
語句&表達式
註釋(//,或/* */)
基本型別佔用空間:
char : 1個位元組
int : 4個位元組
float : 4個位元組
double : 8個位元組
關鍵字(變數)
int :整形變數或函數
float : 單精度浮點
double : 雙精度浮點
char : 字元變數或函數返回型別
#define : 使用前處理器定義常數
const : 定義常數
auto : 自動變數(只能用在函數內,只能修飾區域性變數)
extern : 變數或函數是在其他檔案或本檔案其他文章定義(參照一個全域性變數時,用它做宣告,多用於多個檔案共用相同的全域性變數或函數)
register : 暫存器變數
sizeof : 計算數據型別長度
static : 靜態變數(同一個檔案內,值不變)
typedef : 使用該關鍵字可以爲型別取一個新的名字;包括結構體,可以重新給新的命名
字元常數
\\ : \字元
\' : '字元
\" : "字元
\? : ?字元
\b : 退格
\n : 換行
\r :回車
\t : 水平製表符
\v : 垂直製表符
\ooo : 一到三位八進制數
\xhh :一個或多個十六進制數
運算子
算術運算子 : + - * / % ++ --
關係運算符 : == != > < >= <=
邏輯運算子 : && || !
位運算子 : & | ^
賦值運算子 : = += -= *= /= %= <<= >>= &= ^= |=
其餘 : &(返回地址); *(返回一個數); sizeof()(返回變數帶大小); ?:(條件表達式)
判斷語句
if語句
if...else 語句
if巢狀語句
switch語句:
{
case 1 : 語句 break;
...
default : break;
}
switch巢狀語句
回圈語句
while回圈 (先判斷後回圈,爲真進入回圈);
for回圈 (初值,回圈條件,執行條件);
do...while (先回圈,後判斷,爲真繼續回圈);
break (終止回圈,繼續執行下一條語句);
continus (對回圈體有效,停止本次回圈,重新開始);
goto (無條件轉移);
陣列
1,定義多維陣列;
2,傳遞陣列到函數三種方法:通過指針,通過陣列名包含數位大小,不包含陣列大小;
3,從函數返回陣列,只能通過返回指針的方式返回,函數定義爲指針函數; 返回的是不帶索引的陣列名(int r[10]; return r;);
4,指向陣列的指針,通過不帶索引的陣列名來指向陣列中的一個元素的指針(int b[10]; int *p; p=b;(實際就等於*p=b[0]; *(p+1)實際對於b[1];))
列舉
定義1: enum 列舉型別 {元素1,元素2,... }; (不定義列舉變數,後面使用的時候再定義) enum 列舉型別 列舉變數;
定義2: enum 列舉型別 {元素1,元素2,... } 列舉變數;
定義3: enum {元素1,元素2,...} 列舉變數; (省略列舉型別)
指針
1,指針定義(*p(指向地址p的數據用*p表示));
2,指針的算術運算
{
int d[6];
int *p; //定義陣列
for(p=d;p<&d[6];p++) //將指針指向陣列的最後一個地址,指針遞增;
printf("addr=%p,data=%d",p,*p);
}
3,指針陣列
{
int d[3];
int *p[3];//定義的指針陣列
int i=0;
for(i=0;i<3;i++)
{
p[i]=&d[i];//將指針指向陣列d;
printf("i=%d,*p=%d"i,p[i]);
}
}
4,指向指針的指針(int d; int *p; int **pr; pr=&p;p=&d);
5,傳遞指針給函數,只需宣告函數的形參爲指針型別就可以;傳入函數的時候穿地址;
6,從函數返回指針,宣告函數爲指針函數;如上函數返回陣列相同;
字串
1,字串定義:char str[6]字串最後一個地址預設放到是'\0',不可改變;
2,字串相關函數
(1) strcpy(s1,s2) : 將字串s2複製到s1;
(2) strcat(s1,s2) : 將字串s2接到s1末尾;
(3) strlen(s1) : 返回字串長度;
(4) strcmp(s1,s2) : 字串比較,相同爲0,s1大返回大於0,s1小返回小於0
結構體
1,結構體主要包括四部分:struct 標籤{ 變數定義列表... }結構變數;
2,定義一個結構體:struct, 標籤, 結構變數最少出現兩部分;
3,也可以用typedef建立新型別結構體;
4,存取結構體可用 存取運算子(.): 結構變數.變數1;
5,結構體作爲函數參數傳遞,將結構變數傳遞給參數即可;
6,指向結構的指針,需要用->;
共用體i
1,定義: 與結構體類似,定義了一個新的數據型別;主要包括四部分;
2,存取共用體的方式與結構圖類似;
輸入或輸出
1,標準輸入輸出爲:stdin-鍵盤,stdout-螢幕;
2,getchar()和putchar();分別爲從鍵盤取一個字元或輸出一個字元到螢幕;
3,gets()和puts;分別爲從鍵盤取一個字串,輸出一個字串到螢幕;
4,scanf()和printf();輸入,輸出;
檔案讀寫
開啓檔案: FILE *fopen("filename","mode(r,w,a,r+,w+,a+)");
關閉檔案: fclose(fp);
寫入檔案: fputc(c,fp)寫一個字元c;fputs(s,fp)寫一個字串s;
讀取檔案: fgetc(fp)讀一個字元;fgets(s,n,fp)讀一個字串到s;