001+limou+C语言入门知识——(0)大略了解
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)站推薦
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語言
| 一開始直接輸入二進(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)找其他版本。下載好安裝包后,打開安裝包,點(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)行試試(先別著急理解)
- ⑧運(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ù)”
在上述代碼中:整形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,少部分平臺為211. 計(jì)算數(shù)據(jù)大小的單位
| 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 byte | 1NB= 1024BB |
| Dogga byte | 1DB= 1024NB |
注意:其中比較常用的是bit、B、KB、MB、GB、TB。后來也出現(xiàn)了一些簡化表達(dá),例如K有時(shí)候代表1024,M代表1024K。
12. 變量和常量的簡單介紹
(1)變量的概念
①定義變量:“(類型)+(變量名/標(biāo)識符)=(數(shù)據(jù))"
在后面令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é)束;
②在運(yùn)行中,全局變量的“生命周期”和“整個(gè)main()開始直到運(yùn)行結(jié)束”或者“整個(gè)程序的開始到運(yùn)行”是一樣的,也就是說全局變量的生命周期是整個(gè)程序。
03、C語言的四種常量
(1)常見的四種常量
(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)義字符
①常見的有:
| \? | 問號 |
| \ ’ | 單引號 |
| \ " | 雙引號 |
| \ \ | 斜杠 |
| \n | 換行 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
| \b | 退格符,相當(dāng)于backspace |
| \f | 換頁 |
| \r | 回車 |
| \ddd | ddd表示八進(jìn)制 |
| \xdd | dd表示十六進(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)把值輸入的!
(2)在VS2022中使用scanf常常會報(bào)警告,“scanf的返回值被忽略”,其實(shí)是在提示我們要注意用上scanf的返回值,但是其實(shí)目前是可以忽略這個(gè)警告的,編譯器只是警告你:要注意scanf的返回值,不要輕易忽略。
(3)利用返回值(EOF或者某個(gè)數(shù)值)來多次輸入(多組輸入),可以利用scanf的返回值來實(shí)現(xiàn)多次的輸入
(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é)果會輸出什么呢? //答案是4321printf的返回值就是輸出的字符數(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)義字符等。
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ù)]={元素};
注意:數(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è)式子的值。
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))的作用
①修飾局部變量
①加了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)行隱藏的功能(不會被別人看到,有保密效果)
③修飾函數(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)容
(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ù))
注意:不要被*前面的類型影響對指針大小的判斷
注意:編譯器如果報(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ū)別的
11、運(yùn)算符的優(yōu)先級和結(jié)合性
這個(gè)以后找時(shí)間補(bǔ)充
12、關(guān)鍵字auto(用的比較少)
(1)意思為“自動(dòng)”,一般用在局部變量上,表示一個(gè)“自動(dòng)變量”。
(2)代碼演示和解說
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 固体物理学习笔记
- 下一篇: 2017年电大计算机应用基础试题及答案,