當前位置:首頁 » 編程軟體 » c語言編譯學習筆記

c語言編譯學習筆記

發布時間: 2024-06-13 14:36:10

⑴ 璁$畻鏈鴻璦瀛︿範絎旇

鏈鏂囧皢涓哄ぇ瀹朵粙緇嶈$畻鏈鴻璦瀛︿範絎旇幫紝鍖呮嫭C璇璦銆丆錛岋紝銆丣AVA銆丳ython銆丄ccess銆丮ySQL銆乄eb銆丮S Office銆乄PS Office絳夊唴瀹廣
👨‍💻C璇璦
Dos鍛戒護銆佽$畻鏈虹粍鎴愬師鐞嗐佸氬獟浣撱佹暟鎹搴撴搷浣溿佽$畻鏈虹綉緇溿丆璇璦紼嬪簭璁捐°佷笂鏈鴻冭瘯銆
👨‍💻C++
C++璇璦姒傝堪銆丆++璇璦鏁版嵁綾誨瀷銆佽繍綆楃﹀拰琛ㄨ揪寮忋佸熀鏈鎺у埗璇鍙ャ佹暟緇勩佹寚閽堜笌寮曠敤銆佸嚱鏁般佺被鍜屽硅薄緇ф壙銆佹ā鏉跨瓑鍐呭廣
👨‍💻JAVA
JAVA璇璦姒傝恆丣AVA鏁版嵁綾誨瀷銆佽繍綆楃﹀拰琛ㄨ揪寮忋佹祦紼嬫帶鍒躲佺被銆佹暟緇勫拰瀛楃︿覆鎿嶄綔銆佸紓甯稿勭悊銆佽緭鍏ヨ緭鍑哄強鏂囦歡鎿嶄綔銆佺嚎紼嬩笌瀵硅薄涓茶屽寲銆佺紪鍐欏浘褰㈢敤鎴風晫闈銆丄PPLET紼嬪簭璁捐★細JZSDK鐨勪笅杞藉拰鎿嶄綔銆丣AVA鐨勫簲鐢ㄣ
👨‍💻Python
Python璇璦鍩烘湰璇娉曞厓緔犮佸熀鏈鏁版嵁綾誨瀷銆佺▼搴忕殑鎺у埗緇撴瀯銆佹枃浠跺拰鏁版嵁鏍煎紡鍖栥丳ython璁$畻鐢熸併
👨‍💻Access
鏁版嵁搴撶郴緇熴佹暟鎹搴撳拰琛ㄣ佹暟鎹搴撴煡璇㈢獥浣撱佹姤琛ㄣ佹暟鎹璁塊棶欏點佸畯銆佹ā鍧楃瓑銆
👨‍💻MySQL
鏁版嵁搴撳熀鏈姒傚康涓庢柟娉曘丮ySQL騫沖彴涓嬬殑SQL銆佷氦浜掓搷浣溿丮ySQL鐨勬暟鎹搴撶紪紼嬨丮ySQL鐨勭$悊涓庣淮鎶ゃ丮ySQL鐨勫簲鐢ㄧ紪紼嬬瓑銆
👨‍💻Web
Web鎶鏈鍩虹銆丠TTP鍗忚鍩虹銆丠TML鍩虹銆丆SS鍩虹銆丣avaScript紼嬪簭璁捐″熀紜銆佸姩鎬佺綉欏墊妧鏈姒傝堪銆
👨‍💻MS Office
璁$畻鏈虹殑鍩虹鐭ヨ瘑銆乄ord鐨勫姛鑳藉拰浣跨敤銆丒xcel鐨勫姛鑳藉拰浣跨敤銆丳owerPoint鐨勫姛鑳藉拰浣跨敤銆
👨‍💻WPS Office
鍚勪釜杞浠剁殑鍔熻兘鍜屼嬌鐢ㄣ

⑵ C璇璦瀛︿範絎旇(20000瀛)

C璇璦鐨勯瓍鍔涗笌鍩虹鍏ラ棬: 鎺屾彙楂樻晥緙栫▼宸ュ叿


C璇璦錛屽洜鍏跺姛鑳藉己澶с侀珮鏁堝彲縐繪嶅拰騫挎硾搴旂敤錛岃瑾変負涓撳剁駭鐨勯栭夈傚畠鐨勭紪紼嬩箣鏃呬粠緇忓吀鐨Hello World紼嬪簭寮濮嬶紝main鍑芥暟鏄紼嬪簭鐨勭伒欖傦紝鑰宲rintf()鍑芥暟鍒欐槸涓庝笘鐣屽硅瘽鐨勭獥鍙c


鏋勫緩C紼嬪簭鐨勫熀鐭: 浠庣粨鏋勫叆鎵


- 紼嬪簭妗嗘灦錛氶勫勭悊鍛戒護鍜屽嚱鏁版槸鏋勫緩浠g爜鐨勫熀鏈鍗曞厓錛屽畠浠鏋勫緩浜咰紼嬪簭鐨勯ㄦ灦銆
- main鍑芥暟瑙f瀽錛氫綔涓虹▼搴忕殑璧風偣錛宮ain鍑芥暟涓嶄粎鎵胯澆鍏ュ彛閫昏緫錛屽叾榪斿洖鍊間篃鍐沖畾浜嗙▼搴忕殑緇撴潫鐘舵併
- 緙栫▼瑙勮寖錛氫唬鐮佹暣媧侊紝娉ㄩ噴璇﹀敖錛屾爣璇嗙︾殑閫夋嫨鍜屼嬌鐢錛岄兘鏄楂樻晥緙栫▼鐨勫叧閿銆

鍙橀噺涓庤祴鍊肩殑鑹烘湳: 鐞嗚В鏁版嵁鐨勬祦鍔


- 瀹氫箟涓庡懡鍚錛氳勫垯娓呮櫚鐨勫彉閲忓0鏄庯紝璧嬩簣浜嗘暟鎹鐢熷懡銆
- 鍩虹鏁版嵁綾誨瀷錛氭暣鍨嬨佹誕鐐規暟錛堝俧loat鍜宒ouble錛夊拰瀛楃︾被鍨嬶紝鍚勬湁鍏剁敤閫斿拰鐗規с

娣卞叆鎺㈢儲錛氬瓧絎︿覆鐨勪笘鐣


- 瀛楃︽暟緇勪笌瀛楃︿覆錛氬瓨鍌ㄥ湪鍐呭瓨涓鐨勫瓧絎﹀簭鍒楋紝閫氳繃printf榪涜屾牸寮忓寲杈撳嚭銆
- 瀛楃︿覆甯擱噺涓庤漿鎹錛氱洿鎺ュ拰絎﹀彿甯擱噺鐨勫尯鍒嗭紝浠ュ強鑷鍔ㄤ笌寮哄埗綾誨瀷杞鎹㈢殑寰濡欎箣澶勩
- 榪愮畻絎︾殑欖斿姏: 綆楁湳銆侀昏緫銆佸叧緋誨拰涓夌洰榪愮畻錛岃〃杈懼紡鐨勪笘鐣屾棤姣斾赴瀵屻

緇撴瀯涓庢帶鍒: 鐞嗚В閫昏緫鐨勬祦杞


- 鍒嗘敮涓庨昏緫鎺у埗: if-else緇撴瀯鐨勭伒媧昏繍鐢錛屼互鍙婇昏緫榪愮畻絎︾殑宸у欐搷浣溿
- 寰鐜鐨勫氭牱鎬: while銆乨o-while鍜宖or鐨勫閥濡欒漿鎹錛屼互閫傚簲涓嶅悓鍦烘櫙鐨勬帶鍒墮渶奼傘

閫氳繃瀹炶返錛屽傛墦鍗扮瓑鑵頒笁瑙掑艦鍜9脳9涔樻硶琛ㄧず渚嬶紝浣犱細鍙戠幇C璇璦鐨勫▉鍔涘拰娣卞害銆傛寔緇瀛︿範錛屼綘浼氳В閿佹洿澶氬彲鑳姐

c語言編寫好代碼後,怎麼編譯,最後生成可執行文件

材料/工具:vc6.0

1、打開c語言編輯工具,在工具中寫入程序的源代碼。

⑷ 學習C語言需要掌握哪些基本知識

1.入門程序

#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}

2.數據類型

數據類型:

1.基本數據類型:

1.1. 整型:int 4個位元組

1.2. 字元型:char 1個位元組

1.3. 實型(浮點型)

  • 1.3.1.單精度型:float 4個位元組

  • 1.3.2.雙精度型:double 8個位元組

  • 2.構造類型:

    2.1.枚舉類型

    2.2.數組類型

    2.3.結構體類型

    2.4.共用體類型

    3.指針類型:

    4.空類型:

    3.格式化輸出語句

  • %d:十進制整數;

  • %c:單個字元;

  • %s:字元串;

  • %f:6位小數;

  • #include <stdio.h>

  • int main()

  • {

  • int age = 18;

  • float height = 1.85;

  • char unit = 'm';

  • printf("小明今年%d歲 ", age);

  • printf("小明身高%f%c ", height, unit);

  • printf("小明現在在慕課網上學習IT技術 ");

  • return 0;

  • }

  • 學好C++才是入職大廠的敲門磚! 當年要是有這課,我的C++也不至於這樣

    已失效

    4.常量

    值不發生改變的量成為常量;

    定義字元常量(注意後面沒有;)

  • #include <stdio.h>

  • #define POCKETMONEY 10 //定義常量及常量值

  • int main()

  • {

  • printf("小明今天又得到%d元零花錢 ", POCKETMONEY);

  • return 0;

  • }

  • 5.運算符

    5.1.算數運算符:+,-,*,/,%,++,--;前++/--,先運算,再取值.後++/--,先取值,再運算;

    5.2.賦值運算符:

    5.3.關系運算符;

    5.4.邏輯運算符;

    5.5.三目運算符:

  • 表達式1 ? 表達式2 : 表達式3;

  • 6.水仙花數計算

    輸出所有三位數的水仙花數字

    所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數,如:153就是一個水仙花數,153=111+555+333。

  • #include <stdio.h>


  • int main()

  • {

  • //定義三位數num,個位數sd,十位數td,百位數hd

  • int num, sd, td, hd;

  • //循環所有三位數

  • for( num=100 ; num<1000 ; num++ )

  • {

  • //獲取三位數字num百位上的數字

  • hd = num/100 ;

  • //獲取三位數字num十位上的數字

  • td = num/10%10 ;

  • //獲取三位數字num個位上的數字

  • sd = num%10 ;

  • //水仙花數的條件是什麼?

  • if(num ==hd*hd*hd+td*td*td+sd*sd*sd )

  • {

  • printf("水仙花數字:%d ", num);

  • }

  • }

  • return 0;

  • }

  • 7.列印正三角形的*

  • #include <stdio.h>

  • int main()

  • {

  • int i, j, k;

  • for(i=1; i<5; i++)

  • {

  • /* 觀察每行的空格數量,補全循環條件 */

  • for( j=i ; j<5 ; j++ )

  • {

  • printf(" "); //輸出空格

  • }

  • /* 觀察每行*號的數量,補全循環條件 */

  • for( k=0 ; k<2*i-1 ; k++ )

  • {

  • printf("*"); //每行輸出的*號

  • }

  • printf(" "); //每次循環換行

  • }

  • return 0;

  • }

  • 8.臭名遠揚的goto語句

    很少使用

  • #include <stdio.h>

  • int main()

  • {

  • int sum = 0;

  • int i;

  • for(i=1; i<=10; i++)

  • {

  • printf("%d ", i);

  • if(i==3){

  • goto LOOP;//滿足條件就執行goto語句

  • }

  • }

  • //執行goto

  • LOOP:printf("結束for循環了...."); //請選擇合適位置添加標識符

  • return 0;

  • }

  • 9.形參與實參

    形參:形參是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳入的參數;

    實參:實參是在調用時傳遞該函數的參數。

    函數的形參和實參具有以下特點:

  • 形參只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數後則不能再使用該形參變數。

  • 實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值等辦法使實參獲得確定值。

  • 在參數傳遞時,實參和形參在數量上,類型上,順序上應嚴格一致,否則會發生類型不匹配」的錯誤。

  • 10.函數返回值注意

    注意:void函數中可以有執行代碼塊,但是不能有返回值,另void函數中如果有return語句,該語句只能起到結束函數運行的功能。其格式為:return;

    11.遞歸

  • #include <stdio.h>


  • int getPeachNumber(int n) //這里要定義n,要不編譯器會報錯!

  • {

  • int num;

  • if(n==10)

  • {

  • return 1;

  • }

  • else

  • {

  • num = (getPeachNumber(n+1)+1)*2;

  • printf("第%d天所剩桃子%d個 ", n, num);

  • }

  • return num;

  • }

  • int main()

  • {

  • int num = getPeachNumber(1);

  • printf("猴子第一天摘了:%d個桃子。 ", num);

  • return 0;

  • }

  • 12.變數存儲類別 !

    12.1.生存周期劃分存儲方式

    C語言根據變數的生存周期來劃分,可以分為靜態存儲方式和動態存儲方式。

    靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變數,如全局變數。

    動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變數是根據程序運行的需要而建立和釋放的,通常包括:函數形式參數;自動變數;函數調用時的現場保護和返回地址等。

    12.2.存儲類型劃分

    C語言中存儲類別又分為四類:自動(auto)、靜態(static)、寄存器的(register)和外部的(extern) ;

  • 用關鍵字auto定義的變數為自動變數,auto可以省略,auto不寫則隱含定為「自動存儲類別」,屬於動態存儲方式。

  • 用static修飾的為靜態變數,如果定義在函數內部的,稱之為靜態局部變數;如果定義在函數外部,稱之為靜態外部變數。

  • 注意:靜態局部變數屬於靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放;靜態局部變數在編譯時賦初值,即只賦初值一次;如果在定義局部變數時不賦初值的話,則對靜態局部變數來說,編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)

  • 為了提高效率,C語言允許將局部變數的值放在CPU中的寄存器中,這種變數叫「寄存器變數」,用關鍵字register作聲明。

  • 注意:只有局部自動變數和形式參數可以作為寄存器變數;一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變數;局部靜態變數不能定義為寄存器變數。

  • 用extern聲明的的變數是外部變數,外部變數的意義是某函數可以調用在該函數之後定義的變數。

  • #includ <stdio.h>

  • //來源公眾號:C語言與CPP編程

  • int main()

  • {

  • //定義外部局部變數

  • extern int x;

  • return 0;

  • }

  • int x=100;

  • 13.內部函數外部函數 !

    在C語言中不能被其他源文件調用的函數稱為內部函數 ,內部函數由static關鍵字來定義,因此又被稱為靜態函數,形式為:

    static [數據類型] 函數名([參數])

    這里的static是對函數的作用范圍的一個限定,限定該函數只能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的內部函數是沒有問題的。

    在C語言中能被其他源文件調用的函數稱為外部函數 ,外部函數由extern關鍵字來定義,形式為:

    extern [數據類型] 函數名([參數])

    C語言規定,在沒有指定函數的作用范圍時,系統會默認認為是外部函數,因此當需要定義外部函數時extern也可以省略。 extern可以省略; 14.數組 數組:一塊連續的,大小固定並且裡面的數據類型一致的內存空間, 數組的聲明:數據類型 數組名稱[長度n]

  • 數據類型 數組名稱[長度n] = {元素1,元素2,元素3,......};

  • 數據類型 數組名稱[] = {元素1,元素2,元素3,......};

  • 數類類型 數組名稱[長度n]; 數組名稱[0] = 元素1;數組名稱[1] = 元素2;...... 注意: 1、數組的下標均以0開始; 2、數組在初始化的時候,數組內元素的個數不能大於聲明的數組長度; 3、如果採用第一種初始化方式,元素個數小於數組的長度時,多餘的數組元素初始化為0; 4、在聲明數組後沒有進行初始化的時候,靜態(static)和外部(extern)類型的數組元素初始化元素為0,自動(auto)類型的數組的元素初始化值不確定。

  • 15.數組遍歷

  • #include <stdio.h>


  • int main()

  • {

  • int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

  • int i;

  • for(i=0;i<10;i++)

  • {

  • printf("%d ",arr[i]);

  • }

  • return 0;

  • }

  • 數組的冒泡排序

  • 冒泡排序的思想:相鄰元素兩兩比較,將較大的數字放在後面,直到將所有數字全部排序。

  • 字元串與數組

  • 在C語言中,是沒有辦法直接定義子字元串數據類型的,需使用數組來定義所要的字元串,形式如下:

  • char 字元串名稱[長度] = "字元串內容";

  • char 字元串名稱[長度] = {'字元串1','字元串2',....,'字元串n',''};

  • 注:

  • []中的長度可以省略不寫;

  • 採用第二種方式最後一個元素必須是'',表示結束;

  • 第二種方式不能寫中文!; 輸出字元串時,要使用:printf("%s",字元數組名);或puts(字元數組名);

  • 16.字元串函數

  • strlen(s):獲取字元串s的長度;

  • strcmp(s1,s2):比較字元串;比較的時候會把字元串轉換成ASCII碼再進行比較,返回結果為0表示s1和s2的ASCII碼值相等,返回結果為1表示s1比s2的ASCII碼大,返回結果為-1表示s1比s2的ACSII碼小;

  • strcpy(s1,s2):字元串拷貝;s2會取代s1中的內容;

  • strcat(s1,s2)將s2拼接到s1後面;注意:s1的length要足夠才可以!

  • atoi(s1)將字元串轉為整數!

  • 17.多維數組

    數據類型 數組名稱[常量表達式1]...[常量表達式n];

    多維數組的初始化與一維數組的初始化類似也是分兩種:

  • 數據類型 數組名稱[常量表達式1][常量表達式2]...[常量表達式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..,值n}};

  • 數據類型 數組名稱[常量表達式1][常量表達式2]...[常量表達式n]; 數組名稱[下標1][下標2]...[下標n] = 值;

  • 多維數組初始化要注意以下事項:

  • 採用第一種始化時數組聲明必須指定列的維數。因為系統會根據數組中元素的總個數來分配空間,當知道元素總個數以及列的維數後,會直接計算出行的維數;

  • 採用第二種初始化時數組聲明必須同時指定行和列的維數。

  • 18.多維度數組的遍歷

    使用嵌套循環

    注意:多維數組的每一維下標均不能越界!

    19.結構體

    C 數組允許定義可存儲相同類型數據項的變數,結構是 C 編程中另一種用戶自定義的可用的數據類型,它允許您存儲不同類型的數據項。

    結構用於表示一條記錄,假設您想要跟蹤圖書館中書本的動態,您可能需要跟蹤每本書的下列屬性:

  • Title

  • Author

  • Subject

  • Book ID

  • 定義結構

    為了定義結構,您必須使用 struct 語句。struct 語句定義了一個包含多個成員的新的數據類型,struct 語句的格式如下:

  • struct tag {

  • member-list

  • member-list

  • member-list

  • ...

  • } variable-list ;

  • tag 是結構體標簽。

    member-list 是標準的變數定義,比如 int i; 或者 float f,或者其他有效的變數定義。

    variable-list 結構變數,定義在結構的末尾,最後一個分號之前,您可以指定一個或多個結構變數。下面是聲明 Book 結構的方式:

  • struct Books

  • {

  • char title[50];

  • char author[50];

  • char subject[100];

  • int book_id;

  • } book;

  • 在一般情況下,tag、member-list、variable-list 這 3 部分至少要出現 2 個。以下為實例:

  • //此聲明聲明了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c

  • //同時又聲明了結構體變數s1

  • //這個結構體並沒有標明其標簽

  • struct

  • {

  • int a;

  • char b;

  • double c;

  • } s1;


  • //此聲明聲明了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c

  • //結構體的標簽被命名為SIMPLE,沒有聲明變數

  • struct SIMPLE

  • {

  • int a;

  • char b;

  • double c;

  • };

  • //用SIMPLE標簽的結構體,另外聲明了變數t1、t2、t3

  • struct SIMPLE t1, t2[20], *t3;


  • //也可以用typedef創建新類型

  • typedef struct

  • {

  • int a;

  • char b;

  • double c;

  • } Simple2;

  • //現在可以用Simple2作為類型聲明新的結構體變數

  • Simple2 u1, u2[20], *u3;

  • 訪問結構成員

    為了訪問結構的成員,我們使用成員訪問運算符(.)。成員訪問運算符是結構變數名稱和我們要訪問的結構成員之間的一個句號。您可以使用 struct 關鍵字來定義結構類型的變數。下面的實例演示了結構的用法:

  • #include <stdio.h>

  • #include <string.h>

  • //來源公眾號:C語言與CPP編程


  • struct Books

  • {

  • char title[50];

  • char author[50];

  • char subject[100];

  • int book_id;

  • };


  • int main( )

  • {

  • struct Books Book1; /* 聲明 Book1,類型為 Books */

  • struct Books Book2; /* 聲明 Book2,類型為 Books */


  • /* Book1 詳述 */

  • strcpy( Book1.title, "C Programming");

  • strcpy( Book1.author, "Nuha Ali");

  • strcpy( Book1.subject, "C Programming Tutorial");

  • Book1.book_id = 6495407;


  • /* Book2 詳述 */

  • strcpy( Book2.title, "Telecom Billing");

  • strcpy( Book2.author, "Zara Ali");

  • strcpy( Book2.subject, "Telecom Billing Tutorial");

  • Book2.book_id = 6495700;


  • /* 輸出 Book1 信息 */

  • printf( "Book 1 title : %s ", Book1.title);

  • printf( "Book 1 author : %s ", Book1.author);

  • printf( "Book 1 subject : %s ", Book1.subject);

  • printf( "Book 1 book_id : %d ", Book1.book_id);


  • /* 輸出 Book2 信息 */

  • printf( "Book 2 title : %s ", Book2.title);

  • printf( "Book 2 author : %s ", Book2.author);

  • printf( "Book 2 subject : %s ", Book2.subject);

  • printf( "Book 2 book_id : %d ", Book2.book_id);


  • return 0;

  • }

  • 學好C++才是入職大廠的敲門磚! 當年要是有這課,我的C++也不至於這樣

    已失效

    20.共用體

    共用體是一種特殊的數據類型,允許您在相同的內存位置存儲不同的數據類型。您可以定義一個帶有多成員的共用體,但是任何時候只能有一個成員帶有值。共用體提供了一種使用相同的內存位置的有效方式。

  • #include <stdio.h>

  • #include <string.h>


  • union Data

  • {

  • int i;

  • float f;

  • char str[20];

  • };


  • int main( )

  • {

  • union Data data;


  • printf( "Memory size occupied by data : %d ", sizeof(data));


  • return 0;

  • }

  • 21.指針

  • #include <stdio.h>


  • int main ()

  • {

  • int var = 20; /* 實際變數的聲明 */

  • int *ip; /* 指針變數的聲明 */


  • ip = &var; /* 在指針變數中存儲 var 的地址 */


  • printf("Address of var variable: %p ", &var );


  • /* 在指針變數中存儲的地址 */

  • printf("Address stored in ip variable: %p ", ip );


  • /* 使用指針訪問值 */

  • printf("Value of *ip variable: %d ", *ip );


  • return 0;

  • }

  • 22.文件讀寫

    寫入文件

  • #include <stdio.h>


  • int main()

  • {

  • FILE *fp = NULL;


  • fp = fopen("/tmp/test.txt", "w+");

  • fprintf(fp, "This is testing for fprintf... ");

  • fputs("This is testing for fputs... ", fp);

  • fclose(fp);

  • }

  • 讀取文件

  • #include <stdio.h>


  • int main()

  • {

  • FILE *fp = NULL;

  • char buff[255];


  • fp = fopen("/tmp/test.txt", "r");

  • fscanf(fp, "%s", buff);

  • printf("1: %s ", buff );


  • fgets(buff, 255, (FILE*)fp);

  • printf("2: %s ", buff );


  • fgets(buff, 255, (FILE*)fp);

  • printf("3: %s ", buff );

  • fclose(fp);


  • }

  • C語言與C++學習路線

    23.排序演算法

    十大經典排序演算法(動態演示+代碼)

    24.查找演算法

    九種查找演算法

    25.面試知識

    C語言與C++面試知識總結

    26.字元串操作

    字元串操作的全面總結

    27.C語言常用標准庫解讀

    C語言常用標准庫解讀

    28. C語言最常用的貪心演算法

    C語言最常用的貪心演算法就這么被攻克了

    29. 常見的C語言內存錯誤及對策

    常見的C語言內存錯誤及對策

    30. C語言實現面向對象的原理

    C語言實現面向對象的原理

    31. C語言/C++內存管理

    看完這篇你還能不懂C語言/C++內存管理?

    32. 再談C語言指針

    再談指針:大佬給你撥開 C 指針的雲霧

    C語言函數指針之回調函數

    C語言指針詳解(文末有福利)

    33. C語言預處理命令

    長文詳解:C語言預處理命令

    34. C語言高效編程與代碼優化

    C語言高效編程與代碼優化

    35. C語言結構體

    C語言之結構體就這樣被攻克了!值得收藏!

    36. 原碼, 反碼, 補碼 詳解

    原碼, 反碼, 補碼 詳解

    37. C語言宏定義

    簡述C語言宏定義的使用

    38. c語言之共用體union、枚舉、大小端模式

    c語言之共用體union、枚舉、大小端模式

⑸ C程序員怎麼學習

一、知識點學習
①字元串
1、strlen()函數的返回值是什麼類型的?
2、字元串strlen() 的值,是否和他占據的內存空間相同?
3、你是否知道strcpy 函數存在的潛在風險?如何避免?
4、如果一個字元串沒有字元串結束符,而調用str 開頭的庫函數,會發生什麼?
5、Strcpy(),strcat(),strcmp(),strncpy(),strncat(),strncmp()內部到底是如何運行的?這些函數到底對源字元串和目標字元串做了些什麼?你是否觀察過它們運行時兩個字元串內存的變化?
6、上面這些函數使用時,各有哪些需要注意的地方?
7、你會幾種字元串查找操作?
8、c語言中有字元串這個數據類型嗎?
9、對字元串進行操作的時候,是否為字元串結尾符預留存儲位置?不然的話容易造成非常訪問內存。
二、數組
1、你肯定知道,定義「int a[10]; 」, a[10] 這個元素是無效的。
2、你知道幾種數組初始化的方法?
3、數組和指針有千絲萬縷的聯系而又不同,你是否對他們在不同情況下的使用進行過詳細的總結?
4、「int calendar[10][20]; 」,這是一個什麼樣的數組?它擁有 10 數組類型的元素,還是 20 個?
5、「int a[10]; 」,數組名 a 在本質上是一個什麼?你是否列印過 a 的值?
6、你知道幾種獲取數組某元素的方法?
7、指針和數組相同嗎?什麼時候相同?什麼時候不同?
8、用指針和下標訪問數組元素,那種方式更快?
三、結構體
1、你知道什麼是位域結構體嗎?如何定義它?如何使用它?
2、你知道位元組對齊對結構體佔用內存空間大小的影響嗎?如何計算結構體佔用內存的大小?
四、宏
1、你知道宏的本質是什麼嗎?函數?語句?類型定義?或者其他?
2、你知道語言設計者為什麼設計宏嗎?這些原因目前是否仍然成立?
3、你會設計帶有參數的宏嗎?
4、你知道使用宏的參數的的時候的注意事項嗎?
5、你會設計帶有可變參數的宏嗎?
6、你知道使用宏有什麼劣勢嗎?
7、你有沒有更好的替代方案?
五、枚舉
1、是否可以指定枚舉中各項的值?
2、如果不指定值,枚舉的第一個值是多少?
3、枚舉的值是否可以是負數?
4、定義枚舉的時候,你是否專門定義了枚舉的最小值和最大值?
六、switch
1、switch©中的 c 的數據類型有哪些?
2、你是否在所有的switch 中都加了 default 語句?
3、是否在所有的case 中都加了 break 語句(一般情況的做法)?如果你不加 break ,將會發生什麼?
七、static
1、static的三個主要作用是什麼?
2、static的修飾的局部變數是保存在什麼地方的?全局變數哪 ?
3、static修飾的全局變數和函數,在其他的文件中是否可以訪問?如何訪問?
4、你知道static 是 c 語言中實現封裝和隱藏的利器嗎?你是否經常使用?
5、定義在不同源文件中的static 全局變數,編譯器是否允許他們的變數名稱相同?他們在內存中的地址是否相同?函數那?
八、const
1、你是否經常使用const 來表明不能夠被更改的變數?
2、你是否經常使用const 常量來代替宏?
3、下面四種情況,你知道是各表示什麼意思嗎?
int i_value= 10;
const int* pvalue = & i_value
int const *pvalue = & i_value
int* const pvalue=& i_value
const int* const pvalue =& i_value
4、你知道const 常量如何初始化嗎?
九、sizeof
1、對於字元數組,strlen 和 sizeof 的值是否相同?
2、S izeof本質上是函數還是宏?
3、S izeof的返回值是什麼類型?

十、指針
1、「int *p; 」 &p , p , *p 他們的值分別表示什麼含義?
2、你定義的指針初始化了沒?
3、你理解指針的指針的概念嗎?你會使用嗎?
4、「int *pi_value; pi_value = 0x100000; 」 pi_value + 1 的值是是多少?
5、你會定義函數指針嗎?
6、你會使用函數指針調用函數嗎?
7、關於指針和數組,請參見知識點數組。
十一、動態分配內存
1、動態分配的內存是保存在什麼地方的?
2、什麼情況下使用動態分配內存?
3、動態申請內存一定要釋放,否則會內存泄露。你是否使用過內存檢測工具?
十二、函數
1、如何查看函數在內存中的地址?
2、如何給一個函數指針賦值?
3、你是否會定義可變入參函數
4、你是否可以區分函數的形參與實參?
5、如何定義函數名,以准確的表達函數的用途?
6、你是否使用const 來修飾函數入參和返回值,以表的特定的含義?
7、遞歸如何使用?
十三、變數
1、全局變數,局部變數,常量分別保存在內存中的什麼地方?
2、不同類型的變數,你是否知道其作用域?
3、全局變數和局部變數是否可以重名?你是否在這樣做?
4、局部變數在函數退出後是否有效,為什麼?
5、全局變數為什麼不允許定義在頭文件中?有何危害?
十四、連接(Linux)
1、鏈接位於編譯過程的那個階段?
2、動態鏈接庫和靜態鏈接庫使用時有何區別?
3、如何 對 動態鏈接庫 進行 動態載入 (不用重啟程序而載入鏈接庫)?
4、動態鏈接有何優點?
5、動態鏈接庫中是否定義了非static 的全局變數?你是否知道這是一個非常危險的動作?
6、動態庫中的全局變數(非static )和函數(非 static )是否可以和上層全局變數和函數重名?重名後會發生什麼事情?
十五、運行時的數據結構(Linux)
1、你知道什麼是段的概念嗎?
2、可執行程序可以分為幾個段?每個段保存的是什麼內容?
3、如何查看可執行程序各個段的大小?
4、當函數被調用時發生了什麼?
5、你有沒有試過程序的棧空間最大有多大?程序超過此大小會發生什麼?
6、你使用的系統的棧是向下生長的,還是向上生長的?
十六、Include
1、如何避免對同一頭文件的多次include ?
十七、聲明
1、什麼是 聲明 ,什麼是定義?
2、你是否會運用c 語言聲明的優先順序規則?
十八、關於 復雜度 :
1、軟體的首要技術使命 是 管理復雜度。
2、優秀程序員的 一個特質 是將復雜的事情簡單化,而非將簡單的問題復雜化。所以,他們一般會選擇簡單的解決方案。
3、極盡機巧,復雜的解決方案,除了將新手搞得暈頭轉向之外,別無他用。
4、閱讀優秀程序員的代碼,是一種享受,你很少遇到思維的阻力,你可以盡情的享受簡單之美。

⑹ C瀛︿範絎旇幫紙涓錛 C璇璦鍜屾眹緙栬璦鐨勫尯鍒

C瀛︿範絎旇幫紙涓錛 C璇璦鍜屾眹緙栬璦鐨勫尯鍒

2016-07-11 09:43162浜洪槄璇璇勮(0)鏀惰棌涓炬姤

鍒嗙被錛

C瀛︿範絎旇幫紙13錛

鐗堟潈澹版槑錛氭湰鏂囦負鍗氫富鍘熷壋鏂囩珷錛屾湭緇忓崥涓誨厑璁鎬笉寰楄漿杞姐

C瀛︿範絎旇幫紙浜旓級C璇璦鍜屾眹緙栬璦鐨勫尯鍒

C璇璦鍜屾眹緙栬璦鐨勫尯鍒錛

奼囩紪錛氭晥鐜囬珮錛屽圭‖浠剁殑鍙鎿嶆帶鎬ф洿寮猴紝浣撶Н灝忥紝涓嶆槗緇存姢錛屽彲縐繪嶆у緢宸錛
C:鏁堢巼姣旇緝浣庯紝紜浠跺彲鎿嶆帶鎬ф瘮杈冨樊錛岀洰鏍囦唬鐮佷綋縐澶э紝瀹規槗緇存姢錛屽彲縐繪嶆у緢濂姐

奼囩紪璇璦榪愯屾晥鐜囬珮鐨勫師鍥狅細

1.奼囩紪璇璦瀹炶川涓婃槸鏈哄櫒璇璦鐨勫姪璁扮︺ CPU鍙鑳借繍琛屽畠鎵鏀鎸佺殑鎸囦護闆嗭紝鑰岃繖浜涙寚浠ら泦褰撲腑鐨勬瘡鏉℃寚浠ら兘鏄涓浜涗簩榪涘埗鏁扮殑搴忓垪錛屼篃灝辨槸鈥0鈥濆拰鈥1鈥濈殑鏈夊簭緇勫悎錛涒0鈥濆拰鈥1鈥濈殑緇勫悎涓嶄究浜庣▼搴忓憳鐨勮板繂鍥犳ゆ湁浜嗏淢OV A 0x40鈥濈瓑榪欐牱鐨勫姪璁扮︺傛墍浠ユ眹緙栬璦緙栬瘧鎴怌PU鍙鎵ц岀殑鏈哄櫒璇璦鍏跺疄鍙瑕佸仛涓涓緲昏瘧鐨勫姩浣滃氨濂戒簡銆傝孋璇璦緙栧啓瀹岀▼搴忓悗錛岄渶瑕侀氳繃緙栬瘧鍣ㄥ皢C璇璦緙栬瘧鎴愪笌鐩稿簲CPU鎸囦護闆嗗瑰簲鐨勬満鍣ㄨ璦銆傛眹緙栬璦涓庢満鍣ㄨ璦鏄涓涓瀵瑰簲鐨勩備絾鏄疌璇璦鍛錛熷綋鐒舵病榪欎箞濂戒簨浜嗐侰璇璦鐨勮娉曟槸鍥哄畾鐨勶紝C璇璦緙栧啓鐨勭▼搴忚佺紪璇戞垚CPU鑳借繪噦鐨勬満鍣ㄨ璦鎸囦護娌″姙娉曚竴涓瀵瑰簲錛屽洜姝ら渶瑕佹湁緙栬瘧瑙勫垯浜嗭紝鎵浠ヨ繍琛屾晥鐜囦綆涓浜涖備篃鍙浠ヨ達紝C璇璦錛屾槸闈㈠悜紼嬪簭鍛樼殑璇璦錛岃屾眹緙栬璦鏄鐩存帴闈㈠悜CPU鐨勮璦銆

2.奼囩紪鏄鐩存帴闈㈠笴PU鐨勮璦錛屽彧瑕佹槸鍦ㄦ寚浠ら泦鏀鎸佺殑鑼冨洿鍐咃紝奼囩紪璇璦鍙浠ョ洿鎺ヨ岀伒媧誨湴綆$悊鍖呮嫭鐗規畩鍔熻兘瀵勫瓨鍣ㄣ侀氱敤瀵勫瓨鍣ㄣ佸瓨鍌ㄥ崟鍏冪殑姣忎竴涓瀛楄妭錛岀敋鑷蟲槸姣忎竴涓猙it銆侰璇璦瀵瑰唴瀛樼殑浣跨敤鍙婄$悊鍔熻兘涔熸槸寰堝己澶х殑錛屼絾姣曠珶榪樻槸鍙楀埗浜庤娉曘備婦涓鏈綆鍗曠殑渚嬪瓙錛孋璇璦褰撲腑娌℃湁瀵瑰簲涓夊瓧鑺傛垨鏄浜斿瓧鑺傜殑鍙橀噺綾誨瀷錛岃佷箞int鍨嬶紝瑕佷箞long鍨嬶紝鎵浠ユ瘡嬈$敵璇峰繀欏繪槸鍥哄畾鐨勫瓧鑺傛暟錛屽娍蹇呴犳垚鍐呭瓨浣跨敤涓婄殑嫻璐廣傝屽ぇ閮ㄤ喚奼囩紪璇璦鏍規湰娌℃湁榪欐牱鐨勮娉曪紝鍦ㄤ吉鎸囦護鐨勫府鍔╀笅錛堝叾瀹炰篃鍙鏄鎻愰珮鍙璇繪э級錛屾眹緙栬璦紼嬪簭鍙浠ヤ嬌鐢ㄤ換鎰忓瓧鑺傛暟鐨勫彉閲忥紝褰撶劧澶勭悊璧鋒潵姣擟璇璦楹葷儲寰楀氾紝鏈緇堣繕鏄涓涓瀛楄妭涓涓瀛楄妭鍦版嫾鎺ュ勭悊錛岃岀敤C璇璦鍐欑▼搴忓氨杞繪澗浜嗭紝涓嶇敤綆¤繖浜涳紝鏈緇堢紪璇戝櫒浼氭悶瀹氬槢銆傝岃交鏉劇殑浠d環灝辨槸閫犳垚浜嗘氮璐廣傝屽唴瀛樹嬌鐢ㄦ晥鐜囦笉楂樺悓鏃朵篃浼氬獎鍝嶅埌鏁翠釜紼嬪簭鐨勬暣浣撴晥鐜囥

C璇璦涓庢眹緙栫殑涓嶅悓閫傜敤鍦哄悎

1錛氳嫢鍙鏈夎緝綆鍗曠殑閫昏緫鎿嶄綔銆侀昏緫綆楁硶銆佺畝鍗曡繍綆楋紝浣跨敤奼囩紪浼氬緱鍒拌緝涓虹簿鍑嗙殑浠g爜錛屼絾鐢╟涔熷悓鏍峰彲浠ュ仛鍒般
2錛氳嫢鎺烘湁澶嶆潅榪愮畻銆佹誕鐐硅繍綆椼侀潪綰挎ф柟紼嬬瓑錛屾眹緙栭毦搴﹀緢澶э紝鑰孋璇璦浣滀負涓縐嶉珮綰ц璦錛屾湁綆媧佺揣鍑戱紝浣跨敤鐏墊椿鐨勮娉曟満鍒訛紝緙栧啓澶嶆潅紼嬪簭瀹規槗寰楀氥
3錛氭瘡涓嬈懼勭悊鍣ㄥ悇鑷鐨勬眹緙栬娉曞ぇ閮戒笉涓鏍鳳紝鑻ヤ粎浣跨敤奼囩紪錛屽彲鎵╁厖鎬с佸彲縐繪嶆ч兘寰堝樊錛岀敤c灝變細濂界殑澶氥
4錛氬圭‖浠惰繘琛屽垵濮嬪寲鐨勬搷浣滐紝浣跨敤奼囩紪璇璦銆

⑺ SystemC璇璦瀛︿範絎旇


娣卞叆鎺㈢儲SystemC鐨勪笘鐣岋紝璁╂垜浠涓璧烽嗙暐榪欐懼紑婧愬簱鐨勯瓍鍔涖係ystemC錛屼綔涓篊++鐨勬墿灞曪紝浠ュ叾鐩磋傜殑璇娉曞拰寮哄ぇ鐨勬ā鍧楀寲璁捐★紝涓虹郴緇熺駭楠岃瘉鍜岀‖浠舵弿榪版彁渚涗簡楂樻晥宸ュ叿銆


鍩虹璇娉曟傝

棣栧厛錛屼簡瑙e熀紜璇娉曟槸鍏抽敭銆係ystemC鐨勫熀鏈鏋勯犲寘鎷琒C_MODULE瀹氫箟瀛愭ā鍧楋紝sc_in, sc_out, sc_inout綾誨瀷鐨勭鍙e0鏄庯紝浠ュ強鍔熻兘鎻忚堪鐨勬棤鍙傚嚱鏁幫紝濡俻rocess()錛屽叾鍦ㄦ瀯閫犲嚱鏁頒腑閫氳繃SC_METHOD()娉ㄥ唽銆傝繖浜涙槸鏋勫緩妯″潡閫昏緫鐨勫熀鏈鏋勪歡銆


瀛愭ā鍧楀0鏄庣殑鑹烘湳

瀛愭ā鍧楃殑澹版槑涓嶄粎娑夊強絝鍙e0鏄庯紝榪樺寘鎷鏃犲弬鏁扮殑process()鍑芥暟錛屽畠鐢ㄤ簬瀹炵幇闃誨炶祴鍊箋傚湪鏋勯犲嚱鏁頒腑錛岄氳繃SC_METHOD()鏂規硶娉ㄥ唽騫跺0鏄庢晱鎰熷彉閲忥紝紜淇濆勭悊閫昏緫鐨勬g『瑙﹀彂銆


澶勭悊榪囩▼鐨勫氭牱鎬


SystemC鎻愪緵浜嗕笁縐嶅勭悊鏂瑰紡錛歋C_METHOD鎵ц岀粍鍚堥昏緫錛孲C_THREAD閫傚悎瀹炴椂浠誨姟錛孲C_TASK綾諱技浜嶸erilog鐨刟lways錛屾敮鎸佹棤闄愬驚鐜鍜寃ait()銆傜悊瑙h繖浜涗笉鍚岀殑澶勭悊鏂瑰紡鏈夊姪浜庢牴鎹瀹為檯闇奼傞夋嫨鍚堥傜殑鎵ц岀瓥鐣ャ


妯″潡闂村崗鍚屼笌璋冪敤

妯″潡闂寸殑鍗忎綔閫氳繃SC_CTOR瀹炰緥鍖栧苟榪炴帴瀛愭ā鍧楀疄鐜般傛帴鍙h繛鎺ュ寘鎷鎸囬拡澹版槑銆佸硅薄瀹炰緥鍖栵紙紜淇濆敮涓鏍囪瘑錛夊拰淇″彿榪炴帴銆傚湪嫻嬭瘯闃舵碉紝Testbench鎴栦富鍑芥暟涓錛屼俊鍙峰彂鐢熷櫒濡倈enerate_reset()閫氳繃wait()鏉ユ帶鍒舵椂搴忋


浠跨湡涓庤皟璇


鍦ㄤ豢鐪熷紑濮嬫椂錛孴HREAD瀹忕敤浜庨樆濉炵洿鍒版晱鎰熶俊鍙瘋Е鍙戙備富鍑芥暟涓錛屽寘鎷淇″彿澹版槑濡俢lk鍜宺st_n錛屼互鍙奦CD娉㈠艦鏂囦歡鐨勫垵濮嬪寲銆傚壋寤簑ave.vcd鏂囦歡錛屼嬌鐢╯c_trace璺熻釜淇″彿錛屾墽琛宻c_start()鍚庡叧闂璙CD銆傚疄渚嬪寲妯″潡鍙浠ラ氳繃澹版槑鎸囬拡鍚庡壋寤哄硅薄鎴栫洿鎺ュ壋寤哄硅薄鏉ュ畬鎴愩


寮鍙戠幆澧冮厤緗

涓轟簡鍦╒isual Studio 2019鐜澧冧腑浣跨敤SystemC錛岀『淇濇坊鍔犲寘鍚鐩褰曪紝鍚鐢≧TTI錛岄摼鎺SystemC.lib銆傚湪VS Code涓錛屾帹鑽愰氳繃vcpkg瀹夎呭簱銆傚湪Modelsim涓錛岄氳繃vcd2wlf宸ュ叿澶勭悊VCD鏂囦歡錛屽苟灝嗕俊鍙鋒坊鍔犲埌瑙傚療鍒楄〃涓銆


緇撹


鎺屾彙浜哠ystemC鐨勮繖浜涙牳蹇冩傚康錛屼綘灝嗚兘澶熻交鏉鵑槄璇誨拰緙栧啓楂樻晥鐨勭‖浠舵弿榪頒唬鐮併傜幇鍦錛屽氨璺熼殢榪欎簺絎旇幫紝韙忎笂SystemC鐨勫︿範涔嬫棶鍚э紒


⑻ c語言的編譯過程是什麼

c語言的編譯過程如下:
1、預處理:預處理過程實際上是處理「#」的過程:#include包含的頭文件直接拷貝到hello.c中;#define定義的宏定義進行替換,同時刪除代碼中沒有的注釋部分。2、編譯:編譯的過程實質上是將高級語言翻譯成機器語言的過程。3、匯編:匯編器是將匯編代碼轉變成機器可以執行的命令,每一個匯編語句幾乎都對應一條機器指令。匯編相對於編譯過程比較簡單,根據匯編指令和機器指令的對照表一一翻譯即可。4、鏈接:就像hello.c中使用到了C標准庫的東西「printf」,但是編譯過程只是將源文件翻譯成二進制文件而已,這個二進制文件還不能直接執行,還需要一個動作:將翻譯成的二進制文件與需要用到的庫綁定在一塊。
補充:編譯過程可分為6步:掃描(詞法分析)、語法分析、語義分析、源代碼優化、代碼生成、目標代碼優化。

熱點內容
達內php視頻 發布:2024-11-26 21:32:09 瀏覽:555
編譯器分析 發布:2024-11-26 21:13:01 瀏覽:831
存儲過程execute 發布:2024-11-26 21:11:02 瀏覽:255
石器時代合成腳本 發布:2024-11-26 20:57:07 瀏覽:939
漏油器密碼怎麼改密碼 發布:2024-11-26 20:30:11 瀏覽:14
linux編碼命令 發布:2024-11-26 20:23:13 瀏覽:801
密碼加密工具 發布:2024-11-26 20:23:06 瀏覽:692
如何破解加密的wifi 發布:2024-11-26 20:10:29 瀏覽:431
c腳本檢查 發布:2024-11-26 19:56:34 瀏覽:394
伺服器ip控制系統叫什麼 發布:2024-11-26 19:56:31 瀏覽:747