日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

001+limou+C语言入门知识——(0)大略了解

發(fā)布時(shí)間:2023/12/31 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 001+limou+C语言入门知识——(0)大略了解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C語言的入門學(xué)

  • C語言初步入門
    • 2022/11/29
      • 01. 看前需知
      • 02. 內(nèi)容構(gòu)成
      • 03. 學(xué)習(xí)時(shí)間
      • 04. 預(yù)定計(jì)劃
      • 05. 網(wǎng)站推薦
    • 2022/12/01
      • 01. 驅(qū)動(dòng)程序是什么?和其他電腦配件的關(guān)系?和C語言的關(guān)系?
      • 02. 計(jì)算機(jī)編程語言的發(fā)展與C語言
      • 03. C語言的標(biāo)準(zhǔn)有什么?
      • 04. 常見的編譯器有哪些?如何下載一個(gè)編譯器?
      • 05. 初步認(rèn)識頭文件與源文件
      • 06. 在VS2022中運(yùn)行程序以及可能出現(xiàn)的問題
      • 07. 主函數(shù)mian()的介紹
      • 08. 標(biāo)準(zhǔn)頭文件
      • 09. 數(shù)據(jù)類型
      • 10. sizeof()的使用
      • 11. 計(jì)算數(shù)據(jù)大小的單位
      • 12. 變量和常量的簡單介紹
      • 13. scanf()的使用
      • 14. printf()的使用
    • 2022/12/03
      • 01、修改VS外觀和字體
      • 02、變量的作用域和生命
      • 03、C語言的四種常量
      • 04、字符、字符串和轉(zhuǎn)義字符
      • 05、注釋的使用
    • 2022/12/05
      • 01、細(xì)談scanf()的返回值
      • 02、浮點(diǎn)數(shù)的四舍五入
      • 03、printf的返回值
      • 04、配置文件
      • 05、函數(shù)的概念
      • 06、(一維)數(shù)組的概念(英文array)
      • 07、操作符(運(yùn)算符)
      • 08、代碼風(fēng)格
      • 09、strlen的用法注意
      • 10、學(xué)習(xí)C語言的網(wǎng)站
      • 11、注意C語言的代碼和數(shù)學(xué)寫法的區(qū)別
      • 12、VS的基礎(chǔ)調(diào)試
      • 13、“真”與“假”的表達(dá)方式
    • 2022/12/07
      • 01、三目操作符的使用(C語言里只有一個(gè)操作符)
      • 02、逗號表達(dá)式
      • 03、一些常見的關(guān)鍵字(常用的)
      • 04、“計(jì)算機(jī)存儲的方式”和“register的作用”
      • 05、使用“typedef”重命名
      • 06、從C語言視角的內(nèi)存分類和static的作用
      • 07、extern的作用
      • 08、“#define定義常量”和“宏的使用”
      • 09、指針
      • 10、結(jié)構(gòu)體
      • 11、運(yùn)算符的優(yōu)先級和結(jié)合性
      • 12、關(guān)鍵字auto(用的比較少)
      • 13、移動(dòng)VS功能模塊的小技巧
      • 14、編譯器的自動(dòng)修正的
      • 15、打開win計(jì)算器的方法
    • 2022/12/28 修改日志:
      • 修改日期:2022/12/29
      • 修改日期:2022/12/30

C語言初步入門

2022/11/29

01. 看前需知

  • 本筆記將記錄本人第一次C語言的學(xué)習(xí)路徑。由于本人就在學(xué)習(xí)路上經(jīng)常遇到一些“謎語”,深受苦害,所以本筆記內(nèi)容偏向大白話。有不嚴(yán)謹(jǐn)?shù)牡胤?#xff0c;還需辯證看待。如有缺漏,懇請指正。

  • 另外簡單介紹本人在學(xué)習(xí)C語言的過程:先是參考了“bilibili大學(xué)”上的視頻,然后一直在閱讀《C Primer Plis(第六版)》《C和指針》《C陷阱與缺陷》(電子書其實(shí)挺好找的,不想找的可以直接“踢”我,我發(fā)給你……),在其間穿插??途W(wǎng)等網(wǎng)站上的題目(練題挺重要的),順便寫一些沒事找事的“整活”代碼。

  • 本筆記只是為了在正式學(xué)習(xí)C語言之前,初步了解C語言的大致框架,僅僅只是點(diǎn)到為止,不會過于深入。

  • 本人的電腦操作系統(tǒng)是windows11,如需要下載編譯器,還請看前檢查好自己的要下載的編譯器是否合適當(dāng)前的系統(tǒng)。(后面會有檢查系統(tǒng)版本的方法)

  • 目標(biāo)是:大致了解C語言的基礎(chǔ)部分,形成一個(gè)大概的學(xué)習(xí)網(wǎng)絡(luò)圖

02. 內(nèi)容構(gòu)成

注意:本筆記會比較冗長,一是內(nèi)容較多,盡可能涵蓋C語言的重點(diǎn)基礎(chǔ)內(nèi)容,二是盡量讓沒怎么系統(tǒng)接觸過C語言的小白也能夠看懂,會顯得口語化一些。

注意:因?yàn)樽罱苍诳础禖 Primer Plis(第六版)》這本書,因此在筆記里多少也會結(jié)合這本書里的比較重要的概念來書寫。

03. 學(xué)習(xí)時(shí)間

本人花時(shí)間學(xué)習(xí)C語言的時(shí)間比較零碎,光是C的基礎(chǔ)關(guān)鍵知識就大概學(xué)了4個(gè)月(聽說學(xué)C不用學(xué)那么久的?),當(dāng)然學(xué)完不等于學(xué)會,現(xiàn)在很有學(xué)有遺漏的感覺,故寫本筆記來檢查自我,并且和大家一起分享學(xué)習(xí)成果。

04. 預(yù)定計(jì)劃

在2022年結(jié)束前寫完本筆記,2023年一月份前再進(jìn)行一定程度的修正。

05. 網(wǎng)站推薦

  • 博客園
  • CSDN
  • 51CTO.com
  • 開源中國
  • chinaUnix
  • 稀土掘金
  • GitHub
  • segmentfault 思否
  • 2022/12/01

    01. 驅(qū)動(dòng)程序是什么?和其他電腦配件的關(guān)系?和C語言的關(guān)系?

    (1)是指驅(qū)動(dòng)計(jì)算機(jī)里軟件的程序。驅(qū)動(dòng)程序全稱“設(shè)備驅(qū)動(dòng)程序”,是添加到操作系統(tǒng)中的特殊程序,包含的有關(guān)硬件設(shè)備的。這個(gè)信息能使計(jì)算機(jī)與相應(yīng)的設(shè)備進(jìn)行通信;
    (2)驅(qū)動(dòng)程序是硬件廠商根據(jù)操作系統(tǒng)編寫的配置文件,沒有驅(qū)動(dòng)程序,硬件就沒有辦法正常工作;
    (3)電腦運(yùn)行過程:(使用)應(yīng)用軟件->(利用)操作系統(tǒng)->(通過)驅(qū)動(dòng)程序->(運(yùn)行)硬件;
    (4)操作系統(tǒng)的左邊叫上層軟件(C也可以運(yùn)用在這里),操作系統(tǒng)及其右邊的叫做底層軟件(C語言更加擅長底層)。

    02. 計(jì)算機(jī)編程語言的發(fā)展與C語言

    一個(gè)粗糙的邏輯推導(dǎo)
    一開始直接輸入二進(jìn)制(還需要查手冊才能寫出來)->
    匯編語言(使用“助記符”,更好記憶語法,符合人類閱讀習(xí)慣)->
    B語言(但自從被C語言取代之后,B語言幾乎被廢棄)->
    C語言(面向過程式的計(jì)算機(jī)程序設(shè)計(jì)語言)->
    …后續(xù)又產(chǎn)生了很多優(yōu)秀的語言,不過這是后話了

    其中C語言逐漸完善,但是各家都是不同的標(biāo)準(zhǔn),于是產(chǎn)生了C的標(biāo)準(zhǔn)。

    這里推薦書籍《浪潮之巔》(作者吳軍)該書主要簡述了各類IT產(chǎn)業(yè)發(fā)展歷史,是本好書,比較厚。

    03. C語言的標(biāo)準(zhǔn)有什么?

    目前出的C標(biāo)準(zhǔn)有很多:C89、C90、C99、C11、C17 ……還有更加新的標(biāo)準(zhǔn),這就說明C還是流行的(因?yàn)樗匀辉诓粩嗟馗?#xff09;,但可惜對比來說C99之前的標(biāo)準(zhǔn)更加流行,新加入的特性有的仍然未被大流所接受,因此并不是學(xué)越新的標(biāo)準(zhǔn)就越好,了解好C99之前的標(biāo)準(zhǔn)其實(shí)就很夠用了。

    04. 常見的編譯器有哪些?如何下載一個(gè)編譯器?

    • 在學(xué)習(xí)C語言之前,我們需要一個(gè)能寫代碼的環(huán)境,就像是用電腦寫文章、小說一樣,你必須有一個(gè)類似WPS一樣的軟件編寫word文檔吧?寫代碼也是一樣的,需要有個(gè)編譯器來寫代碼和運(yùn)行代碼。
    • 但是對于新手來說,選擇一個(gè)用來寫代碼的編譯器并不容易,操作稍有不慎,就會出現(xiàn)各種奇怪的提示窗口。所以對于初學(xué)者來說,還是十分推薦使用IDE類型的軟件(即集成開發(fā)環(huán)境)。
    • VS就是這種類型的編程軟件,簡單來說,編譯器被包含在IDE里面,有IDE類型的軟件你就可以開始寫代碼啦,但是以后的學(xué)習(xí)中也可以自己嘗試不依賴IDE類型的軟件,開始使用別的編譯器試試看,不過那是后話了。
      (1)常見的有MSVC、GCC、VS、Clang、SUBLIME、WIN-TC、Turbo C;
      (2)C語言是給人看懂的,計(jì)算機(jī)只能讀懂二進(jìn)制,編譯器把我們寫的代碼轉(zhuǎn)化為二進(jìn)制讓電腦能夠理解。

    注意:其實(shí)VS2022應(yīng)該叫集成開發(fā)環(huán)境(縮寫為IDE),是編輯器、編譯器(例如msvc)、調(diào)試器的集合開發(fā)。

    注意:VC是個(gè)編輯器,要裝插件不能獨(dú)自編譯;VS是集成環(huán)境(內(nèi)部有編輯器、編譯器、鏈接器),即裝即用,對新手更加友好。

    1、VS2019(或者VS2022)的初步了解
    (1)VS的優(yōu)點(diǎn):VS全名是Visual Studio,它其實(shí)不是存粹的編譯器,而是集成開發(fā)環(huán)境(IDE,Integrated Development Environment )一下載就可以上手,對新手友好,不需要配置太多環(huán)境,有比較美化的代碼風(fēng)格。(支持大概95%左右的C標(biāo)準(zhǔn)吧,以下為VS的代碼片段截圖);

    (2)VS的缺點(diǎn):內(nèi)存占用大(新手使用其實(shí)大概需要10幾G(因?yàn)槿绻皇菫榱藢W(xué)習(xí)C語言的話,是不需要下載VS所有的功能的),并且最好是放在C盤(預(yù)防未來出現(xiàn)不知名的錯(cuò)誤),記得給自己的盤符預(yù)留好足夠大的內(nèi)存空間,此外還需要有良好的電腦使用習(xí)慣,不過這個(gè)事情就跑題了)。

    2、為什么不選擇其他編譯器呢?
    (1)VC6.0,是98年的編譯器,已經(jīng)停止更新了,老舊并且兼容性差;
    (2)Dev C++,10多年前(現(xiàn)在2022年)就停止更新了,代碼風(fēng)格不美觀,不利于代碼風(fēng)格培養(yǎng);
    (3)CodeBlocks,有些學(xué)校在用,都是不夠主流比較小眾,需要配置環(huán)境,但用著還算不錯(cuò);
    (4)VSCode需要配置環(huán)境(本質(zhì)上是個(gè)編輯器);
    (5)你是大佬就用GCC、clang學(xué)習(xí)C語言。都是這些對初學(xué)計(jì)算機(jī)小白來說挺不友好的……

    注意:其實(shí)編譯器只要用的足夠熟悉就可以,剛開始學(xué)習(xí)C語言的時(shí)候倒也沒必要多糾結(jié),只是最好不要太過老舊……

    3、VS的安裝過程詳解(保姆級別教學(xué))
    (1)檢查自己的電腦是否合適安裝VS2022
    ①通過快捷鍵“win(即那個(gè)有點(diǎn)像田字格的微軟圖標(biāo))+R”,輸入cmd來打開控制臺。(也可以在電腦搜索“命令提示符”或者“cmd”來找到)

    于是電腦屏幕出現(xiàn)類似這樣的界面

    輸入systeminfo,稍后會以文字形式展示系統(tǒng)信息

    或者在控制臺中輸入winver,這個(gè)時(shí)候就會彈出一個(gè)窗口

    ②進(jìn)入官方對于VS2022的系統(tǒng)要求網(wǎng)站,然后進(jìn)行對比
    ③如果想下載其他版本的VS其實(shí)也可以,功能其實(shí)也差不多。不過這里也不再詳細(xì)介紹其他版本的下載了。
    (2)首先用瀏覽器(我一直用的是微軟自帶的Microsoft Edge,其他也都可以)進(jìn)入安裝鏈接: VS官網(wǎng),打開網(wǎng)址如下。

    (3)點(diǎn)擊上方“下載”按鈕(不過點(diǎn)這里只能下載VS2022的),然后下載“社區(qū)版”(因?yàn)槭敲赓M(fèi)的),需要其他版本的VS就需要在官網(wǎng)找其他版本。![在這里插入圖片描述](https://img-blog.csdnimg.cn/23c41932edac43fe8a924f660565916a.png
    (4)下載好安裝包后,打開安裝包,點(diǎn)擊安裝包即可開始下載


    (5)進(jìn)入VS下載界面

    (6)開始下載

    (7)界面設(shè)置(選擇得當(dāng)可以減少VS在電腦中的內(nèi)存占比)

    ①“工作負(fù)荷”的“桌面應(yīng)用與移動(dòng)運(yùn)用”中選擇“使用C++的桌面開發(fā)”
    ②其中“路徑”改D盤當(dāng)然可以,但是最好放在C盤,避免使用不穩(wěn)定
    ③左邊的“安裝詳細(xì)信息”也不需要改,建議直接默認(rèn)就行
    ④看清楚安裝“要求的總空間”有多少,看自己的盤符空間夠不夠用
    (8)開始下載,并且勾選“安裝后啟動(dòng)”選項(xiàng)

    (9)等待下載成功并且重啟電腦,就可以看到會出現(xiàn)這樣的圖標(biāo)(沒出現(xiàn)也可以在電腦中直接搜索Visual Studio2022)

    (10)社區(qū)版登錄后VS就是完全免費(fèi)的(不登陸免費(fèi)30天)

    創(chuàng)建一個(gè)賬戶就可以。
    (11)“開發(fā)設(shè)置”和“選擇主題顏色“
    ①開發(fā)設(shè)置:改成“Visual C++”即可
    ②顏色主題:看個(gè)人的喜好就行(個(gè)人推薦深色,不傷眼…)
    (12)點(diǎn)擊“啟動(dòng)Visual Studio(S)”按鈕
    (13)等待初次啟動(dòng)完畢后,開始寫第一個(gè)C語言文件

    • ①點(diǎn)擊“創(chuàng)建新項(xiàng)目”
    • ②搜索“空項(xiàng)目”,并點(diǎn)擊“空項(xiàng)目”,然后點(diǎn)擊“下一步”
    • ③更改“項(xiàng)目的名稱”(盡量英文)和“路徑”(要保證自己找得到就行,比如創(chuàng)建一個(gè)文件夾,以后一直都放在這個(gè)文件夾里,這一次演示的話可以暫時(shí)放在“桌面”上)
    • ④進(jìn)入VS的界面
    • ⑤右擊右側(cè)“解決方案資源管理器”中的“源文件”,點(diǎn)擊“添加”,選擇“新建項(xiàng)”,添加一個(gè)源文件(即后綴為.c的文件)。另外,由于我的VS裝了一些小插件,所以才有“清理已選代碼”這一選項(xiàng),剛下載的VS是沒有這個(gè)選項(xiàng)的,這些拓展插件以后在別的文章里面也會簡單介紹幾個(gè)。
    • ⑥選擇“C++文件”修改頭文件后綴.cpp為.c(這是因?yàn)椤?cpp”文件是用于C++的“.c”文件是用于C語言的)。并且修改該頭文件的名字,例如我就用了main作為源文件的名字(想叫其他名字的也可以的,但同樣最好是英文名字)
    • ⑦工作區(qū)出現(xiàn)行號和光標(biāo),可以開始編寫第一段代碼啦!

      以下是上述代碼片段,可以復(fù)制下來運(yùn)行試試(先別著急理解)
    #include<stdio.h> int main() {printf("hello word");return 0; }
    • ⑧運(yùn)行程序
      Ⅰ點(diǎn)擊F5或者fn+F5或者fn+shift+F5等(不同電腦可能快捷鍵不一樣)運(yùn)行程序
      Ⅱ也可以點(diǎn)擊VS界面最上方的“綠色播放鍵”按鈕,就可以運(yùn)行程序
    • ⑨運(yùn)行結(jié)果顯示
      (如果出現(xiàn)一閃而過的問題,可以往后看“06. 在VS2022中運(yùn)行程序以及可能出現(xiàn)的問題”,有解決方案)
    • ⑩程序運(yùn)行完后,按任意鍵可以關(guān)閉程序(即現(xiàn)在跳出來的窗口),當(dāng)然除了一些比較特殊的按鍵,比如“關(guān)機(jī)鍵”什么的 ……按個(gè)空格什么的就行了啦!

    注意:如果一直不能下載:
    1、請檢查當(dāng)前的網(wǎng)絡(luò)環(huán)境是否穩(wěn)定
    2、修改電腦Wi-Fi里的DNS服務(wù)地址8.8.8.8或者8.8.8.4
    3、虛心學(xué)習(xí),請教身邊的大佬們吧!

    05. 初步認(rèn)識頭文件與源文件

    首先從文件的后綴就可以看出來兩個(gè)文件的區(qū)別:“XXX.h”叫做“頭文件”,“XXX.c”叫做“源文件”,之前在VS2022里面創(chuàng)建的main.c就是一個(gè)源文件,現(xiàn)在暫時(shí)可以不知道這兩者的區(qū)別,一般寫一些基礎(chǔ)的代碼在.c文件中就足夠了。

    06. 在VS2022中運(yùn)行程序以及可能出現(xiàn)的問題

    (1)在VS中編譯+鏈接+運(yùn)行(可使用快捷鍵F5/fn+F5/ctrl+fn+F5,不同的電腦可能不太一樣)來運(yùn)行代碼;
    (2)若出現(xiàn)運(yùn)行窗口一閃而過的問題,則可以:鼠標(biāo)右擊“項(xiàng)目”->“鏈接器”->“子系統(tǒng)”->修改為“控制臺”即可。

    07. 主函數(shù)mian()的介紹

    #include<stdio.h> int main() {printf("hello word");return 0; }

    (1)在運(yùn)行第一個(gè)C程序的時(shí)候,會發(fā)現(xiàn)程序里有int main()

    main函數(shù)是整個(gè)程序的入口,必須有且只有一個(gè)。無論是哪個(gè)C程序,第一步總是從這里開始。

    注意:這個(gè)main和之前創(chuàng)建的.c源文件的名字“main”不一樣,這里指的main是一個(gè)函數(shù),上文那個(gè)“main”只是我給文件起的一個(gè)名字而已……

    (2)有關(guān)mian函數(shù)的寫法:

    //第一種:常見的寫法(比較多) int main() {return 0; } //第二種:過于古老了,建議別用 void main() {return 0; } //第三種:也可以(很少寫) int main(int argc,char* argv[]) {return 0; } //第四種:也可以 int main(void) {return 0; }

    08. 標(biāo)準(zhǔn)頭文件

    #include<stdio.h> int main() {printf("hello word");return 0; }

    在運(yùn)行第一個(gè)C程序的時(shí)候會發(fā)現(xiàn),開頭有一個(gè)#include<stdio.h>。即標(biāo)準(zhǔn)頭文件。標(biāo)準(zhǔn)頭文件其實(shí)就是包含了C標(biāo)準(zhǔn)中定義的可以直接用的庫函數(shù),引用這個(gè)標(biāo)準(zhǔn)庫,才可以使用printf函數(shù)。

    就可以形象比喻成:我們要用別人的東西(想用標(biāo)準(zhǔn)頭文件stdio.h里面放的函數(shù)printf函數(shù)),需要我們和別人打個(gè)招呼(寫#include<stdio.h>),才可以使用別人的東西(使用printf函數(shù))

    注意:其中#include<stdio.h>中
    ①include其實(shí)是“包含”的意思
    ②stdio就是“標(biāo)準(zhǔn)輸入輸出(standard input/output)”的縮寫

    09. 數(shù)據(jù)類型

    (1)為什么會有數(shù)據(jù)類型?

    寫代碼
    為什么寫代碼->
    解決生活的問題->
    需要信息轉(zhuǎn)化為數(shù)據(jù),利用數(shù)據(jù)描述信息->
    有了數(shù)據(jù)類型的產(chǎn)生->
    因此有能力針對數(shù)據(jù)來解決現(xiàn)實(shí)問題

    (2)對生活中不同的數(shù)據(jù)進(jìn)行分類:

    類型名字
    char字符類型
    short短整形
    int整形
    long長整型
    long long更長的整型
    float單精度浮點(diǎn)型
    double雙精度浮點(diǎn)數(shù)
    (3)之所以叫浮點(diǎn)數(shù),是因?yàn)榭梢越o小數(shù)*10^n對小數(shù)點(diǎn)進(jìn)行移動(dòng)。

    注意:C語言標(biāo)準(zhǔn)規(guī)定long只需要保證>=(大于等于)int既可以,但是long long一定大于int;

    注意:使用不同的類型的好處:空間可以節(jié)省很多,效率也能提高,但是相應(yīng)的錯(cuò)誤也會變多……
    (4)運(yùn)用“數(shù)據(jù)類型”來“存儲數(shù)據(jù)”

    #include <stdio.h> int main() {int a=10;//整形可以存儲一個(gè)整數(shù)char b='C'//字符型可以存儲一個(gè)字符(字符包括“字母”和“數(shù)字”和“特殊符號”)float c=3.14//浮點(diǎn)型可以存儲一個(gè)小數(shù)return 0; }

    在上述代碼中:整形10被存儲在一個(gè)叫做a的空間里,字符C被存儲在叫做b的空間里,小數(shù)3.14被存儲在叫做c的空間里。

    10. sizeof()的使用

    sizeof()函數(shù)以字節(jié)為單位,是計(jì)算類型大小的運(yùn)算符(操作符)。

    #include<stdio.h> int main() {printf("%d",sizeof(int))return 0; } //一般打印出來4,少部分平臺為2

    11. 計(jì)算數(shù)據(jù)大小的單位

    數(shù)據(jù)單位轉(zhuǎn)化關(guān)系
    Byte字節(jié)1B=8bit
    Kilobyte 千字節(jié)1KB =1024B
    Mega byte 兆字節(jié) 簡稱“兆”1MB =1024KB
    Giga byte 吉字節(jié) 又稱“千兆”1GB=1024MB
    Tera byte 萬億字節(jié) 太字節(jié)1TB =1024GB
    Peta byte 千萬億字節(jié) 拍字節(jié)1PB=1024TB
    Exa byte 百億億字節(jié) 艾字節(jié)1EB=1024PB
    Zetta byte 十萬億億字節(jié) 澤字節(jié)1ZB = 1024 EB
    Yotta byte 一億億億字節(jié) 堯字節(jié)1YB= 1024 ZB
    Bronto byte 一千億億億字節(jié)1BB= 1024 YB
    Nona byte1NB= 1024BB
    Dogga byte1DB= 1024NB

    注意:其中比較常用的是bit、B、KB、MB、GB、TB。后來也出現(xiàn)了一些簡化表達(dá),例如K有時(shí)候代表1024,M代表1024K。

    12. 變量和常量的簡單介紹

    (1)變量的概念
    ①定義變量:“(類型)+(變量名/標(biāo)識符)=(數(shù)據(jù))"

    int num=10; num=20;

    在后面令num=20,可以使得num的值從10變化為20,所以num就是變量
    ②“局部變量”和“全局變量”的區(qū)分:在{}外面的是全局變量,{}內(nèi)的叫局部變量,若是存在一個(gè)變量既有全局定義和局部定義,則形成沖突,優(yōu)先使用局部變量
    ③對于定義變量的解讀
    “int num=20;”中的num就是標(biāo)識符,整體代碼大概意思是:在電腦的空間之中,申請4個(gè)字節(jié)存放20這個(gè)數(shù)據(jù)。

    注意:char ch=‘b’,只能放一個(gè)字節(jié),而漢字有兩個(gè)字節(jié)不能存放在char類型中,但是可以理解為字符串來存放

    #include<stdio.h> int num=100; int main() {int num=10;printf("%s",num);return 0; }//則優(yōu)先輸出10,而非100

    (2)常量的概念:值不可以改變的量。

    13. scanf()的使用

    scanf()是輸入函數(shù),按照指定格式取出后面變量的地址來進(jìn)行輸入。

    注意,小數(shù)默認(rèn)為double類型,所以可以在小數(shù)后面加上f或者F表明是一個(gè)float的小數(shù);
    注意,使用未初始的類型容易出錯(cuò),有的老編譯器是不會判斷錯(cuò)誤的,所以使用初始化是一種好的編程習(xí)慣;
    注意,變量名字必須由字母、數(shù)字、下劃線“_”組成,并且長度不能超過63個(gè)字符,嚴(yán)格區(qū)分大小寫,不能是已使用的關(guān)鍵字,并且最好命名是有意義的

    14. printf()的使用

    printf()是輸c出函數(shù),按照指定格式輸出后面變量的值。

    2022/12/03

    01、修改VS外觀和字體

    首先,打開VS工具->選項(xiàng)->環(huán)境

    (1)在“常規(guī)->顏色主題”里改變外觀

    (2)在“字體和顏色->字體”中改變字體等

    02、變量的作用域和生命

    (1)作用域:變量的作用范圍
    ①局部變量作用域是變量所在的局部范圍(其實(shí)就是一對{}以內(nèi));
    ②全局變量在一個(gè)工程(利用extern可以聲明全局變量為外部變量,在項(xiàng)目里面的不同源文件里都可以使用),但是不夠安全,容易改變值,引起bug。
    (2)生命周期:就是生成變量和銷毀變量的一個(gè)時(shí)間段。
    ①在運(yùn)行中,局部變量被使用了,使用完就會被銷毀,也就是說局部變量的生命周期:進(jìn)入作用域生命周期開始,離開作用域生命周期結(jié)束;

    #include<stdio.h> int main()//局部變量的生命周期演示 {{int a=10;//在代碼塊{}里面創(chuàng)建了a這個(gè)局部變量printf("%d\n",a);//這里成功打印了a的值}//出了代碼塊{}的范圍,a被銷毀printf("%d\n",a);//在上面a的值被銷毀,這次就不能再輸出10了return 0; }

    ②在運(yùn)行中,全局變量的“生命周期”和“整個(gè)main()開始直到運(yùn)行結(jié)束”或者“整個(gè)程序的開始到運(yùn)行”是一樣的,也就是說全局變量的生命周期是整個(gè)程序。

    03、C語言的四種常量

    (1)常見的四種常量

  • 字面常量
  • const 修飾的常變量
  • #define定義的標(biāo)識符常量
  • 枚舉常量,關(guān)鍵字是enum
  • (2)嘗試使用四種常量

    #include<stdio.h> #define MAX 100 //#define定義的標(biāo)識符常量,后面使用MAX結(jié)束后,編譯過程MAX全部被替換成100,末尾不加“;”是因?yàn)槿菀壮鯾ug。//以下創(chuàng)建了一個(gè)枚舉常量,只能枚舉出離散變量,但是連續(xù)變量就不能被枚舉出來 enum Sex {MALE, //默認(rèn)值為0FEMALE, //默認(rèn)值為1SECRET //默認(rèn)值為2 };//若是將MALE賦值為5,則后面就依次改為6、7,這叫初始化,不是改變值,所以說是常量非變量int main() {100; //這里只是寫出字面常量,顧名思義“從字面上就可以看出來”'W';3.14;int a=1; //在這里1就是常量int num_1=10; //const 修飾的常變量num_1=20; //num_1是變量,值從10變成20const int num_2=10;num_2=20; //使用了const關(guān)鍵字后,這里就會報(bào)錯(cuò)! /*如果加上前綴const,就使得變量具有了常屬性,就不能被改變了,但是本質(zhì)上還是個(gè)變量,只是從語法的層面給num_2“上鎖”了而已*//*證明,利用數(shù)組[]內(nèi)不可以放變量的特點(diǎn)(除去新加的變長數(shù)組的情況)*/int arr_1[num_2]={0}; //在C99之前,有的編譯器依舊是不能運(yùn)行的,這就證明了被修飾的num_2本質(zhì)上還是一個(gè)變量int arr_2[MAX]={0}; //可以運(yùn)行,這也同樣證明了符號MAX是常量enum Sex s=FEMALE;printf("%d",s); //輸出1return 0; }

    04、字符、字符串和轉(zhuǎn)義字符

    (1)C語言表示字符由‘ ’引起,例如:‘w’;
    (2)字符串由“ ”引起,例如:“abc”,“abc”會自動(dòng)在末尾加上\0,\0表示“結(jié)束標(biāo)志”;

    注意:“a”和‘a(chǎn)’是有區(qū)別的,區(qū)別在于前者有\(zhòng)0結(jié)尾,后者則沒有!

    #include<stdio.h> int main() {char*="abcd"; //char*和char arr[]可以存放一個(gè)字符串,存放字符串的演示char arr_0[]="abcd";char arr_1[]={'a','b','c'}; //則打印可能會打印出abc和其他亂碼,原因是后面沒有\(zhòng)0可以結(jié)束printf("%s\n",arr); //這里%s打印出字符串,但是沒有\(zhòng)0提示結(jié)束char arr_2[]={'a','b','c','\0'} //這樣就沒問題了printf("%d",strlen(arr_0)); //也是靠\0來計(jì)算字符串的長度的,輸出了4,即字符串的長度printf("%d",strlen(arr_1)); //則輸出來是非3的值,是個(gè)隨機(jī)值,什么時(shí)候找到\0就輸出長度return 0; }

    (3)轉(zhuǎn)義字符
    ①常見的有:

    轉(zhuǎn)義字符含義
    \?問號
    \ ’單引號
    \ "雙引號
    \ \斜杠
    \n換行
    \t水平制表符
    \v垂直制表符
    \b退格符,相當(dāng)于backspace
    \f換頁
    \r回車
    \dddddd表示八進(jìn)制
    \xdddd表示十六進(jìn)制

    ②早期的編譯器有三字母詞概念,例如“??)代表]”,?是用在來轉(zhuǎn)義的(類似想打印",不能直接寫",而是要寫\")現(xiàn)在的話\?比較少用了。

    #include<stdio.h> int main() {printf("(are you ok??)");//由于三字母詞的存在,打印出(are you ok]//因此利用\?就可以正常打印printf("(are you ok\?\?)");//正常打印(are you ok??)printf("""); //打印失敗printf("\""); //就可以打印出單個(gè)"return 0; }

    ③利用轉(zhuǎn)義字符 \ 來使用ASCII碼值表

    #include<stdio.h> int main() {printf("%c\n",'\130'); //輸出X,其中\(zhòng)130是八進(jìn)制數(shù)字,用''引轉(zhuǎn)義字符,說明本質(zhì)上還是個(gè)字符,需要用''引用printf("%c\n",'\x63'); //輸出c,其中\(zhòng)x63是十六進(jìn)制的數(shù)字return 0 } //轉(zhuǎn)義字符也算字符是會被整體計(jì)算成一個(gè)字符,因此用strlen要格外注意,轉(zhuǎn)義字符會整體計(jì)算進(jìn)去

    05、注釋的使用

    (1)注釋有兩種:

    //注釋1,實(shí)際上是C++的注釋風(fēng)格,后面被加到C中了,推薦使用這種 /*注釋2,C語言的注釋風(fēng)格*/

    (2)注釋的作用:
    ①可以給別人看懂自己的代碼,或者給未來的自己看懂自己的代碼
    ②可以屏蔽掉不想用但是舍不得刪除的代碼,保留代碼的同時(shí)不影響其他程序
    因此注釋是一個(gè)很好的習(xí)慣!
    (3)另外,在VS中有關(guān)注釋的快捷鍵為:ctrl+K/ctrl+C添加注釋,ctrl+K/ctrl+U取消注釋,可能不同編譯器不一樣)。也可以按住工具欄里的按鈕實(shí)現(xiàn)快速注釋(一般這里是有快捷鍵提示的,建議好好熟練快捷鍵)

    2022/12/05

    01、細(xì)談scanf()的返回值

    (1)scanf的返回值有三種情況

    ①正常返回的話就是讀取到數(shù)據(jù)的個(gè)數(shù);
    ②如果scanf沒有讀取到任何項(xiàng)(比如scanf需要讀取一個(gè)數(shù)字而用戶卻輸入了字母)就會返回0;
    ③scanf檢測到“文件結(jié)尾”時(shí)就會返回EOF,而通常EOF的值是-1。
    注意:使用scanf輸入的時(shí)候,需要按下回車鍵(enter)來提示電腦你已經(jīng)輸入數(shù)據(jù),不要傻傻等著光標(biāo)跳動(dòng),計(jì)算機(jī)是不會自動(dòng)把值輸入的!

    #include<stdio.h> int main() {int a=0;//存放輸入值1int b=0;//存放輸入值2int c=0;//存放scanf的返回值scanf("%d%d",&a,&b);//這里的%d的寫法,就是要求是輸入一個(gè)整型,如果你輸入一個(gè)字母進(jìn)去就會造成讀取失敗,返回0)printf("%d\n",c);return 0; }

    (2)在VS2022中使用scanf常常會報(bào)警告,“scanf的返回值被忽略”,其實(shí)是在提示我們要注意用上scanf的返回值,但是其實(shí)目前是可以忽略這個(gè)警告的,編譯器只是警告你:要注意scanf的返回值,不要輕易忽略。
    (3)利用返回值(EOF或者某個(gè)數(shù)值)來多次輸入(多組輸入),可以利用scanf的返回值來實(shí)現(xiàn)多次的輸入

    #include <stdio.h> int main() {int a=0;while(scanf("%d",&a)==1){printf("你成功輸入了%d次\n",a+1);}//這樣就可以重復(fù)的輸入了return 0; }

    (4)另外,VS的報(bào)錯(cuò)窗口就是“錯(cuò)誤列表”,可以通過“視圖”里面找到“錯(cuò)誤列表”就可彈出。

    注意:要經(jīng)??催@個(gè)錯(cuò)誤列表,能夠檢查出一些代碼的錯(cuò)誤。當(dāng)然有的時(shí)候編譯器自己也看不出來一些錯(cuò)誤,比如,將開頭main寫成mian,在VS2022中,編譯器也檢查不出來這樣的錯(cuò)誤(只會編譯失敗)。

    02、浮點(diǎn)數(shù)的四舍五入

    浮點(diǎn)數(shù)的四舍五入是很復(fù)雜的事情,因?yàn)楦↑c(diǎn)數(shù)是不精確的值。所以在以后的條件判斷中,盡量少用浮點(diǎn)數(shù)進(jìn)行判斷(容易發(fā)生誤判)。

    03、printf的返回值

    首先看一段比較有趣的代碼:

    #include<stdio.h> int main() {int A=43;printf("%d\n",printf("%d",printf("%d",A))); }//結(jié)果會輸出什么呢? //答案是4321

    printf的返回值就是輸出的字符數(shù)量

    ①第三個(gè)printf輸出"43"字符數(shù)量為2,于是返回值為2,第二個(gè)printf就輸出"2”
    ②第二個(gè)printf輸出"2"字符數(shù)量為1,于是返回值為1,第一個(gè)printf就輸出"1"
    要注意一點(diǎn)是:返回值是是輸出的字符數(shù)量,包括數(shù)字,字母,標(biāo)點(diǎn)符號,空格,轉(zhuǎn)義字符等。

    #include<stdio.h> int main() {printf("%d\n",printf("0,1,2,3\n")); } //結(jié)果為 //0,1,2,3 //8

    04、配置文件

    VS保存好寫好的代碼后,就會多出一些配置文件,可以暫時(shí)忽略其他文件,只需關(guān)注.sln和.c和.obj和.exe就可以。(其中sln文件可以打開所有上次編輯的完整的VS文件;c文件是你自己創(chuàng)建的源文件;obj文件時(shí)目標(biāo)文件,了解即可;exe是可執(zhí)行文件,了解即可。),以下是我創(chuàng)建的一個(gè)項(xiàng)目文件。

    05、函數(shù)的概念

    • 結(jié)構(gòu):一個(gè)函數(shù)應(yīng)該由函數(shù)返回值、函數(shù)名、函數(shù)參數(shù)(參數(shù)列表)、函數(shù)體構(gòu)成
    • 分類:可以分為庫函數(shù)(已經(jīng)寫好內(nèi)部代碼的函數(shù),比如使用printf())和自定義函數(shù)(比如自己寫一個(gè)自定義的函數(shù)Add())
    • 之所以會有函數(shù)的概念,其中幾個(gè)目的是為減少代碼量、更加清晰地識別代碼,一個(gè)設(shè)計(jì)好的函數(shù),我們要做某些事情的時(shí)候,只需用這個(gè)函數(shù)就行,而不必每次都去寫這個(gè)函數(shù)里面的內(nèi)容。

    就好像,你要吃薯片,雖然可以自己做薯片,但是你可以直接買商店的包裝薯片,而不必每次都自己去做。而函數(shù)就可以類比那些幫你包裝好薯片的加工廠。

    • 自定義函數(shù)的結(jié)構(gòu)

    ①無需返回的函數(shù)(無返回值的函數(shù))

    void f1(int x)//f1是由自己命名的 {printf("%d %d %d",x,x,x); }//這個(gè)函數(shù)的效果就是:輸入一個(gè)整數(shù),就會自動(dòng)打印三次這個(gè)整數(shù)

    ②需要返回的函數(shù)(有返回值的函數(shù))

    int Add(int x,int y)//2、x,y將a,b的值拷貝過來 {return x+y; }//3、開始進(jìn)行加法運(yùn)算,并且函數(shù)返回這個(gè)加法后的值,return可以理解為等號“==”(C語言的等號是==,賦值符號是=)int main()//0、首先從這里開始按照數(shù)字的順序看起 {int a=0,b=0,c=0;scanf("%d%d",&a,&b);c=Add(a,b);//1、a,b的值被函數(shù)調(diào)用,返回值賦值給了cprintf("%d",c);//4、打印結(jié)果c就可return 0; }

    06、(一維)數(shù)組的概念(英文array)

    (1)概念:同時(shí)存放一組相同類型的變量。數(shù)組的存在可以不用一個(gè)一個(gè)的區(qū)定義多個(gè)變量。
    (2)格式:元素類型+數(shù)組名+[元素個(gè)數(shù)]={元素};

    int main() {int arr[3]={0};//數(shù)組的初始化,和int a=0;這種單個(gè)變量初始化是類似的int arr_1[4]={1,2,3};//不完全初始化char arr_3[]="bit";//存放字符串return 0}

    注意:數(shù)組是沒有\(zhòng)0來結(jié)尾的,只有字符串才有!!!

    (3)如果需要取出數(shù)組里單個(gè)的元素:利用數(shù)組的下標(biāo),從0開始,可以用下標(biāo)訪問一個(gè)元素

    int main() {int i=0int arr[3]={5,4,3};printf("%d",arr[1]);//輸出4//因此可以利用循環(huán)來輸出arr的所有元素while(i<3){printf("%d\n",arr[i]);}return 0; }//依次輸出 //5 //4 //3

    (4)事實(shí)上還有多維數(shù)組的概念,只不過本筆記暫時(shí)只介紹一維數(shù)組,后續(xù)還會寫二階數(shù)組等深入的內(nèi)容。

    07、操作符(運(yùn)算符)

    • (1)C語言很靈活,操作符也有很多(難點(diǎn)之一:操作運(yùn)算符的使用)。

    • 算術(shù)操作符:+、-、*、/、%

    • 移位操作符:>>、<<

    • 按位操作符:&、^、|(按位與、按位異或、按位或)

    • 賦值操作符:=、+=、-=、*=、/=、&=、^=、|=、>>=、<<

    • 單目操作符:!、-(符號)、+(符號)、&、sizeof、~、–、++

    • 關(guān)系操作符:==、>=、<=、!=

    • 邏輯操作符:&&、||

    • 條件操作符:exp1?exp2:exp3

    • 逗號操作符:exp1,exp2,exp3,……

    • 下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員:[ ]、( )、.、->

    注意1:%是取余數(shù),例如1%3=3,4%3=1,5%2=1(實(shí)際上%是個(gè)比較麻煩的操作符,如果兩側(cè)都是正數(shù),那還好理解,但是如果是負(fù)數(shù)呢?后續(xù)會進(jìn)行講解的……)

    注意2:如果輸出符號為%d,a/b得到的是整數(shù),a%b得到的是余數(shù)。

    注意3:/的左右只要有一個(gè)數(shù)是浮點(diǎn)數(shù),就會執(zhí)行浮點(diǎn)數(shù)運(yùn)算(還有輸出格式要寫成%f)
    另外,如果兩端都是整數(shù),那么運(yùn)行結(jié)果也只會是整數(shù),哪怕用%f輸出也是一樣的 注意:用/要得到完整的小數(shù)直接用用%f就行。

    注意4:另外%左右應(yīng)該都是整數(shù),并且%運(yùn)算后是不可以用%f輸出的 注意:初始化(int a=0)和賦值(a=20)是兩個(gè)概念

    注意5:非零值為真,包括負(fù)數(shù)。

    注意6:直接寫18<=a<=30語法沒問題,都是寫法是錯(cuò)誤的應(yīng)該寫成a>=18&&a<=30,不然是報(bào)錯(cuò)的

    注意7:sizeof應(yīng)該是屬于運(yùn)算符,而不是函數(shù)哦!

    注意8:實(shí)際上()經(jīng)常被人忽略,它又叫函數(shù)調(diào)用操作符。最大的用處就是標(biāo)識一個(gè)函數(shù)

    注意9:[ ]主要的作用就是利用數(shù)組的下標(biāo)來訪問數(shù)組的各個(gè)元素,Add(a,b)中,( )的操作對象是Add、a、b

    注意10:.和->是屬于結(jié)構(gòu)體知識的

    注意11:位操作符涉及到二進(jìn)制和三碼(原反補(bǔ))的概念,后續(xù)會講解

    注意12:注意:后置++(–)和前置++(–)的區(qū)別

    注意13:邏輯操作符&&和||的短路的性質(zhì)

    (2)單目操作符、雙目操作符、三目操作符的區(qū)別:有多少個(gè)操作數(shù)就是幾目操作符,如1+2,+操作1和2兩個(gè)操作數(shù)。

    08、代碼風(fēng)格

    (1)代碼高亮:關(guān)鍵字、函數(shù)等會有顏色區(qū)分
    (2)tab的使用,好的編譯器軟件會自動(dòng)幫你tab,會自動(dòng)把代碼排版好。

    09、strlen的用法注意

    char arr[4]={'b','i','t'}; strlen(arr);//由于放入了3個(gè)元素,第4個(gè)初始化默認(rèn)為0,即'\0',故strlen(arr)是3,而不是隨機(jī)值

    10、學(xué)習(xí)C語言的網(wǎng)站

    cplusplus.com但是是全英文的……可以自己嘗試翻譯一下,個(gè)人比較喜歡使用舊版本的網(wǎng)站,比較習(xí)慣。

    11、注意C語言的代碼和數(shù)學(xué)寫法的區(qū)別

    (1)等號
    數(shù)學(xué)里的等于是“=”,在C語言的等于是“==”,而“=”只是一個(gè)賦值運(yùn)算符
    (2)大于(小于)等于號
    數(shù)學(xué)里“1≤x≤2”,但在C語言里面必須要寫成“(x>=1)&&(x<=2)”
    (3)乘法
    數(shù)學(xué)里面“3x”表示“3x”,但是在C語言里面就必須寫成“3x”,不能省略乘號,只是寫成“3x”,這樣寫編譯器是會報(bào)錯(cuò)的

    12、VS的基礎(chǔ)調(diào)試

    • 有關(guān)的調(diào)試用法:
      ①利用printf()函數(shù)進(jìn)行調(diào)試
      ②VS自帶的調(diào)試功能
    • 如果能夠試著調(diào)試自己的代碼,就能減少代碼中的bug

    13、“真”與“假”的表達(dá)方式

    在C語言中,數(shù)值非0的為真(包括負(fù)數(shù)),0則為假。

    2022/12/07

    01、三目操作符的使用(C語言里只有一個(gè)操作符)

    (1)三目操作符的書寫形式

    (exp1?exp2:exp3)

    (2)使用解說:
    若是exp1為真,整個(gè)表達(dá)式的結(jié)果為exp2;
    若是exp1為假,整個(gè)表達(dá)式的結(jié)果為exp3。

    注意:條件操作符不要寫的過于復(fù)雜,這涉及到操作符的優(yōu)先級和結(jié)合性的問題

    02、逗號表達(dá)式

    (1)逗號表達(dá)式的書寫形式

    (exp_1,exp_2,exp_3,exp_4,exp_5,exp_6…,exp_n)

    (2)使用解說:
    從左往右算,則最后一個(gè)表達(dá)式exp_n的值為整個(gè)式子的值。

    //例如: #include <stdio.h> int main() {int a=1,b=1,c=1;int x=(a+1,b+2,c+2);printf("%d",x);return 0; }

    03、一些常見的關(guān)鍵字(常用的)

    (1)關(guān)鍵字,相當(dāng)于是英語中的詞匯
    auto、break、case 、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static struct、switch、typedf、union、unsigned、void、volatile、while
    (2)這些關(guān)鍵字可以先稍微拓展學(xué)習(xí)一下,下面會嘗試講幾個(gè)關(guān)鍵字的用法。
    (3)在以后的學(xué)習(xí)中需要熟記這些關(guān)鍵字(實(shí)際上敲多了就記住了,本人英語挺不好的,也是靠不斷的敲擊記憶的……)
    (4)不能拿關(guān)鍵字創(chuàng)建變量的名字,否則會命名沖突

    04、“計(jì)算機(jī)存儲的方式”和“register的作用”

    (1)早期都是CPU處理,都是隨著發(fā)展CPU處理速度過快了,于是有了更快的存儲設(shè)備,比如寄存器,計(jì)算機(jī)的存儲設(shè)備:網(wǎng)盤->硬盤->內(nèi)存->高速緩存->寄存器
    (2)不同的存儲器:造價(jià)逐漸變貴,內(nèi)存逐漸變小(節(jié)省電腦造價(jià)),速度逐漸變快。存儲器這樣類似金字塔的結(jié)構(gòu)設(shè)計(jì),使得電腦性價(jià)大大提高
    于是關(guān)鍵字register int num=10會讓編譯器檢查這個(gè)變量是否頻繁使用,若是就把這個(gè)變量放入寄存器中,于是程序運(yùn)行就會比較快(實(shí)際上在一些編譯器中就算沒有寫這個(gè)關(guān)鍵字,也會自動(dòng)檢查哪個(gè)變量是最常用的,然后將這個(gè)變量放到寄存器中,所以有的時(shí)候選好編譯器確實(shí)是比較講究的問題)
    (3)這涉及到“局部性原理”的知識后期有興趣的可以后期看《深入理解計(jì)算機(jī)系統(tǒng)》初學(xué)者的話暫且別看。

    05、使用“typedef”重命名

    (1)使用方法

    unsigned int num_1 =100; typedef unsigned int num uint; unit num_2=10;

    (2)假設(shè)你的名字全稱是“歐陽李四”,你村里的人卻叫你小名“狗蛋”。這就相當(dāng)于起了“別名”,故typedef的作用就像是給一些類型起了個(gè)“別名”。(你的鄰居叫“狗蛋”是為了方便,而typedef的使用也是為了方便)

    06、從C語言視角的內(nèi)存分類和static的作用

    (1)從C語言的角度來說,內(nèi)存的分布可以暫時(shí)簡化為
    棧區(qū):局部變量、形式參數(shù)
    堆區(qū):動(dòng)態(tài)內(nèi)存分配(像maiioc、calloc、realloc free等動(dòng)態(tài)內(nèi)存分配函數(shù)就是在這個(gè)地方被使用)
    靜態(tài)區(qū):靜態(tài)變量、全局變量(靜態(tài)區(qū)里的東西,整個(gè)程序結(jié)束才會銷毀)
    (2)static(靜態(tài))的作用
    ①修飾局部變量

    void test() {int a=1;a++;printf(""%d",a); } int main() {int i=0;while(i<10){test();i++;}return 0; }//這打印了10個(gè)2,也就是2 2 2 2 2 2 2 2 2 2void test() {static int a=1;//增加了statica++;printf(""%d",a); } int main() {int i=0;while(i<10){test();i++;}return 0; }//這就打印了2 3 4 5 6 7 8 9 10 11,說明上面的a的值沒有被銷毀,仍然保留著上一次a的值

    ①加了static就相當(dāng)于:你在做數(shù)學(xué)試卷,被老師叫去談話,當(dāng)你回來的時(shí)候,繼續(xù)往下做題,沒有必要重新從第一題開始
    ②不加static就相當(dāng)于:你在做數(shù)學(xué)試卷,被老師叫去談話,當(dāng)你回來的時(shí)候,又從頭開始做題了。

    注意:一個(gè)局部變量本來放在棧區(qū),加了static修飾的局部變量,就會放在靜態(tài)區(qū)了,存儲位置發(fā)生變化,導(dǎo)致局部變量出了作用域不會被銷毀,改變了變量的使用周期(即存儲位置發(fā)生了變化)

    注意:被static修飾后,這個(gè)a后面就不會重新創(chuàng)建為a=1了(但是a的值是可以再被改變的,只是每次都不會被重新創(chuàng)建a,靜態(tài)和常量不是一個(gè)概念!!!)。
    注意:靜態(tài)變量和全局變量還是有很大區(qū)別的!靜態(tài)變量只會在被修飾的局部變量里面值不變,而全局變量整個(gè)程序都是適用的。

    ②修飾全局變量
    使得全局變量只能在本源文件里面使用,同時(shí)能讓其他源文件里,另外一個(gè)被extern修飾的全局變量跨文件作用失效。(讓全局變量的外部鏈接屬性消失了)。其實(shí)這樣的話就有對這個(gè)變量進(jìn)行隱藏的功能(不會被別人看到,有保密效果)

    //源文件1 extern int a; printf("%d",a);//打印不出a的值//源文件2 static int a=10//則只能在本源文件里使用

    ③修飾函數(shù)

    //在main_1.c中 int Add(int x,int y) {return (x+y); }//在main_2.c中 extern int Add(int x,int y);//沒有extern的時(shí)候,有的編譯器是不會去調(diào)用別的頭文件里面定義的函數(shù)的 int main() {int a=10,b=20,sum;sum=Add(a,b);printf("%d\n",sum);return 0; }

    實(shí)際上在C++里面static還有兩種用法,所以實(shí)際上是有五種用法

    07、extern的作用

    (1)可以跨.c文件使用一個(gè)被extern修飾的變量extern int num=1;
    另外函數(shù)也可以類似使用:以下是兩個(gè)源文件里的內(nèi)容

    int Add(int x,int y) {return x+y; } exterp int Add(int,int)//這里是函數(shù)的聲明,只需要告知函數(shù)的參數(shù)是什么即可 {int a=10,b=20;int sum=Add(a,b);printf("%d\n",sum);return 0; }

    (2)與static的使用同時(shí)出現(xiàn)時(shí),會讓extern的作用會消失

    08、“#define定義常量”和“宏的使用”

    (1)#define的使用

    #define M 100 #define STR "hello bit" int main() {printf("%d\n",M);printf("%s\n",STR); }//就會分別輸出100和hello bit

    (2)宏的使用

    #define MAX(x,y) (x>y?x:y)//包括宏參(宏參是沒有類型的),宏內(nèi)容。 //宏與函數(shù)是有去區(qū)別的 int main() {int a=10,b=20;int m=MAX(a,b);printf("%d\n",m);return 0; }

    09、指針

    注意:C語言基礎(chǔ)的重點(diǎn)部分,甚至有的人會出現(xiàn)“暈針”的現(xiàn)象,這一部分在之后的學(xué)習(xí)中請務(wù)必認(rèn)真!!!

    (1)學(xué)指針之前首先要理解一點(diǎn)內(nèi)存的基本概念概念:內(nèi)存是電腦上特別重要的存儲器,看可以cun,計(jì)算機(jī)中程序的運(yùn)行都是在內(nèi)存中運(yùn)行的,內(nèi)存可以被分割成一個(gè)個(gè)“小內(nèi)存”,這個(gè)“小內(nèi)存”可以用一個(gè)小格子表示,每個(gè)格子有一個(gè)對應(yīng)的編號,就可以依靠編號來快速找到這個(gè)格子(也就是單個(gè)的內(nèi)存空間)。而這個(gè)編號就是內(nèi)存的地址,這個(gè)“小內(nèi)存”就叫內(nèi)存單元,內(nèi)存單元一般可以存放一個(gè)字節(jié)的數(shù)據(jù)(剛好放一個(gè)char類型的數(shù)據(jù))
    (2)地址的產(chǎn)生:32位電腦,32根地址線(相當(dāng)于電線),電線是通電的,有高電平,低電平,轉(zhuǎn)化為數(shù)字信號就是1或者0,32個(gè)二進(jìn)制位就可以產(chǎn)生232個(gè)位置,能夠產(chǎn)生232個(gè)地址(管理2^32字節(jié)的空間,其實(shí)也就4G大小的空間)
    注意:64位也可以類似理解
    (3)此時(shí)就可以深刻理解int a=10的含義:向內(nèi)存申請4個(gè)字節(jié)的空間,存儲10這個(gè)值(具體怎么存放后期講)
    ????????|???????? ????????|???????? (而每個(gè)字節(jié)都有地址)
    a實(shí)際上是占用4個(gè)字節(jié)的空間,但是每個(gè)字節(jié)都有地址,&a取得其實(shí)是第一個(gè)字節(jié)的地址(也就是最小的地址)
    (4)int pa =&a中,取出來a的地址存放到pa,pa就是一個(gè)存放指針的變量它的類型是int,我們把pa叫做一個(gè)指針變量。

    注意:*在表明pa是指針變量,int是在說明pa指向的對象是int類型。 注意:指針即“地址”,通過地址可以找到變量的值,甚至改變變量的值

    注意:定義指針時(shí),*跟在類型還是跟在變量上都可以 注意:%p是用來專門打印地址的

    (5)當(dāng)然指針變量本身也是一個(gè)變量
    (6)那么指針變量本身的大小是多少個(gè)字節(jié)呢? 指針變量是存放地址的,地址是:
    ①32位機(jī)器上:32個(gè)0/1組成的2進(jìn)制序列,需要32位bit位的空間存儲,指針變量就需要4個(gè)字節(jié)
    ②64位機(jī)器上:64個(gè)0/1組成的2進(jìn)制序列,需要64位bit位的空間存儲,指針變量就需要8個(gè)字節(jié)(編譯器可以換位數(shù))

    int main() {char* p1;int* p2;double *p3;printf("%zd\n",sizeof(p1));//zd是printf("%zd\n",sizeof(p2));printf("%zd\n",sizeof(p3));return 0; }//在x86(32位機(jī)器)結(jié)果都是4,而64位機(jī)器都是8

    注意:不要被*前面的類型影響對指針大小的判斷

    注意:編譯器如果報(bào)警告就可以將%d改成%zd

    10、結(jié)構(gòu)體

    (1)結(jié)構(gòu)體是為了描述更多的復(fù)雜對象而誕生的,有些對象僅僅靠單個(gè)的char、int、float…來描述是不夠的,這個(gè)時(shí)候就需要結(jié)構(gòu)體的存在了。
    (2)struct是創(chuàng)建結(jié)構(gòu)體的重要關(guān)鍵字,結(jié)構(gòu)的存在使得描述一個(gè)對象時(shí),可以用多個(gè)數(shù)據(jù)描述。
    (3)結(jié)構(gòu)體成員可以利用“.”或者“->”來訪問,兩者用法是有區(qū)別的

    struct Student {char name[20];//名字int age;//年齡char id[15];//學(xué)號float score;//成績 }; int main() {struct Student s1={"張三",20,"2022010823",88.5f};struct Student s2={“翠花”,18,"2022030405",98.0f};printf("%s %d %s %f",s1.name,s1.age,s1.id,s1.score);struct Student *ps1=&s1;printf("%s %d %s",(*ps1).name,(*ps1).age,(*ps1).id,(*ps1).score);printf("%s %d %s %f",ps1->name,ps1->age,ps1->id,ps1->score); }

    11、運(yùn)算符的優(yōu)先級和結(jié)合性

    這個(gè)以后找時(shí)間補(bǔ)充

    12、關(guān)鍵字auto(用的比較少)

    (1)意思為“自動(dòng)”,一般用在局部變量上,表示一個(gè)“自動(dòng)變量”。
    (2)代碼演示和解說

    int main() {int a=10;//局部變量又叫自動(dòng)變量,自動(dòng)創(chuàng)建自動(dòng)銷毀,由于所有的局部變量都是自動(dòng)變量,所以前面的auto被省略了,實(shí)際上通常是不會寫的。return 0; }

    13、移動(dòng)VS功能模塊的小技巧

    可以拖動(dòng)功能模塊,更好滿足我們的工作需求。
    例如下面:有兩個(gè)源文件,通過拖動(dòng)這個(gè)其中一個(gè)源文件可以同時(shí)瀏覽兩個(gè)源文件。

    14、編譯器的自動(dòng)修正的

    有的編譯器盡管能運(yùn)行一些代碼,但并不代表該代碼就是沒有錯(cuò)誤的,這是新手常會誤會的錯(cuò)誤,認(rèn)為只要有好的編譯器,代碼能運(yùn)行就說明正確。但是實(shí)際上在寫代碼的時(shí)候我們要盡可能足夠嚴(yán)謹(jǐn),否則就會出現(xiàn)意想不到的錯(cuò)誤(編譯器也沒辦法修正了)

    15、打開win計(jì)算器的方法

    win(就是鍵盤上微軟的圖標(biāo)按鈕)+R,輸入calc就可以彈出計(jì)算器。

    2022/12/28 修改日志:

    在編輯的過程中肯定有寫得令人遺憾的地方,如有缺漏著實(shí)抱歉。

    修改日期:2022/12/29

    修改日期:2022/12/30

    總結(jié)

    以上是生活随笔為你收集整理的001+limou+C语言入门知识——(0)大略了解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。