C語言學習筆記()
一、取地址符的錯用
include <stdio.h>
int main()
{
int i;
scanf("%d",&i);
printf("%d",i);
}
如果將輸出語句改為printf("%d",&i);編譯並不會報錯,但得不到想要的結果
二、scanf錄入
1.scanf("%d%d%d",&a,&b,&c);
2.scanf("%d,%d,%d",&a,&b,&c);
注意第二種用鍵盤輸入時元素間用空格鍵而不是逗號隔開
scanf("%d\n",&a);//此處多加了一個\n
函式scanf()格式控制字串中含有’\n’等轉義字元,會導致資料輸入不能按照正常方式終止。此情況編譯不會報錯,但執行時會出錯,大多是粗心導致,注意則好.
三、函式
(一)隨機函式
#include<stdio.h>
#include<stdlib.h>
int main()
{ int i=0;
for(;i<10;i++)
printf("%d",rand()%100);}
該函式雖是隨機函式,但多次執行後會發現每次輸出的元素都一樣,但可加入隨機種子,比如以時間作為種子,因為時間不停地在變化,所以隨機數也會隨時間的變化而變化。
只需迴圈前新增srand((int)time(0)) 或者 srand((unsigned)time(NULL))即可
(二)函式的返回值
#include<stdio.h> int fun(int x, int y); // 函式宣告 void main() { int a=1, b=2, c; c = fun(a, b); // 函式的呼叫,呼叫自定義函式fun,其中a,b為實際引數,傳遞給被呼叫函式的輸入值 printf("a,b中的較大值為%d\n",c); } // 自定義函式fun int fun(int x, int y) // 函式首部 { // {}中的語言為函式體 return x>y ? x : y; // 返回x和y中較大的一個數,這就是函式的返回值 }
注意:設定的函式為int型,則其返回值也一定是int型;
void函式無返回值。
四、陣列
(一)
二維陣列初始化時,可以省略行數,不可以省略列數,即定義二維陣列時可以對第一維的長度不指定,但第二維的長度不能省去。
設有陣列int am,如果要訪問ai的值,編譯器的定址方式為:
&ai=&a0+isizeof(int)n+j*sizeof(int); //注意n為第二維的維數
因此,可以省略第一維的維數,不能省略其他維的維數。
(二)
int nums[2][2] = {{1,2},
{1,2}};
[ ]裡面的個數必須是一個固定值,可以是常量(比如6、8)、常量表達式(比如3+4、5*7)。絕對不能使用變數或者變量表達式來表示元素個數,大多數情況下不要省略元素個數(當陣列作為函式的形參和陣列初始化時除外)
五、如何防止單獨開啟EXE檔案時的閃退情況
#include <stdlib.h> //需要新增一個頭檔案
......
system("pause"); //整個程式結尾處凍結螢幕,使用者按任意鍵結束。
也可以在結尾處新增 getchar();
但並不適用於所有程式。
六、敲程式碼時中英文的轉換問題
emmm,,,其實這不算什麼問題,但就是有很多人編譯報錯之後找不到這個錯誤,其實編譯後報錯下方會有提示,提示也很具體,真的很具體,根據提示找錯誤,自己就可以解決這個問題。再者敲程式碼時細心一些,多注意中英文的轉換,可有效避免此類問題的發生。