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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++探索之旅】第一部分第四课:内存,变量和引用

發(fā)布時間:2025/3/17 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++探索之旅】第一部分第四课:内存,变量和引用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.



內(nèi)容簡介

1、第一部分第四課:內(nèi)存,變量和引用

2、第一部分第五課預(yù)告:簡易計算器



內(nèi)存,變量和引用


上一課《【C++探索之旅】第一部分第三課:第一個C++程序》中,我們已經(jīng)學(xué)習(xí)了如何創(chuàng)建,編譯,運行我們的第一個C++程序。我們也解釋了這個程序每一行的意義。


我們不但在IDE(Integrated Development Environment,集成開發(fā)環(huán)境。例如Visual Studio,Codeblocks,xCode等)中創(chuàng)建程序,也學(xué)習(xí)了如何在終端命令行中創(chuàng)建。


不過到目前為止,我們寫的程序還非常簡單,只能在屏幕上顯示消息,還不能和用戶進(jìn)行交互。我們慢慢來彌補(bǔ)這一缺憾。


在此之前,我們首先來學(xué)習(xí)一個計算機(jī)科學(xué)的基本概念,就是:變量。


變量使用電腦的內(nèi)存來存儲信息,以便之后再次使用。大家應(yīng)該用過計算器吧,我們平時不太使用的幾個鍵:M+,M-,MR,MC,其實就是在使用變量和內(nèi)存的概念(M是Memory的縮寫,表示《內(nèi)存》),這幾個鍵的作用如下:


M+:把目前顯示的值放在存儲器中 (memory +)

M- :從存儲器內(nèi)容中減去當(dāng)前顯示值 (memory -)

MR:調(diào)用存儲器內(nèi)容 (memory recall)

MC:清除存儲器內(nèi)容 (memory clear)


以上這些按鍵,可以操作存儲在計算器的存儲器(內(nèi)存)里的計算值。


我們將在電腦上學(xué)習(xí)類似的事情,畢竟我們的電腦兄說到底不過是一臺大“計算器”,本質(zhì)上就是做二進(jìn)制(0和1)的運算,不然也不會叫“計算機(jī)”了對吧。



什么是變量


上面我們舉了計算器的例子來更形象地說明,畢竟在信息技術(shù)的世界里,基本的原理是相通的。在我們的電腦里,也有一些電子元件,可以儲存數(shù)值,并且能保存一段時間。當(dāng)然,背后的科學(xué)原理是比較復(fù)雜的。


不過大家可以放心,我們沒必要搞清楚這背后的一套復(fù)雜的原理,我們只需要學(xué)會怎么把數(shù)值存儲到電腦的內(nèi)存中就好了。至于復(fù)雜的部分就交由編譯器和操作系統(tǒng)來處理了,是不是突然覺得生活很美好呢?


我們只需要知道變量其實就是電腦借給我們的一小段內(nèi)存,里面儲存了數(shù)值。我們可以想象電腦里面有一個大櫥柜(比喻內(nèi)存),如下圖所示。這個大櫥柜非比尋常,因為它擁有成千上萬(甚至數(shù)十億)個小抽屜,這些小抽屜就是內(nèi)存中我們可以存放數(shù)值的地方。




電腦的內(nèi)存的原理就有點像一個有著很多抽屜的大櫥柜。


對于一個計算器來說,我么通常一次只能儲存一個數(shù)值。但是我們的電腦可比普通的計算器厲害多了。不然也不會那么貴了,對吧?說的就是你,蘋果電腦。


聰明如你應(yīng)該料想到了:在C++程序中,我們可以同時儲存很多變量。因此,就需要區(qū)分這些變量,以便之后調(diào)用時可以分得清誰是誰。因此,在C++程序中,每個變量擁有一個名字。這個名字就有點像上圖中的抽屜外面貼的標(biāo)簽,使我們能夠找到所要的抽屜。


我們的電腦還可以使我們儲存不同的數(shù)值,比如我們想儲存數(shù)字,字母,單詞,句子,圖片,聲音,等等。這就涉及到變量的類型了。


你可以想象變量的類型就好比抽屜的不同樣式,在生活中,我們放葡萄酒和書籍的抽屜是不一樣的,不是嗎?


變量名


對于人來說,名字很重要,名字起得好,有很多益處。名字起得不好,會很搞笑。



變量也有名字,而給C++中的變量起名字有如下規(guī)則:


  • 只能包含字母,數(shù)字和下劃線(_)

  • 第一個字符必須是字母或下劃線

  • 不能和C++的關(guān)鍵字重復(fù),比如不能是int,char,if,while等。


  • 例如:


    name,studentNum,year2015,_computerPrice 等都是規(guī)范的命名。


    而:


    +animal,@gmail,*1991,等都是通不過的命名。


    除此之外,C++對于大小寫敏感。也就是說,大寫字母和小寫字母在C++看來是不同的。有的編程語言不區(qū)分大小寫。所以,在C++中,givenName,GIVENname,GiVenName是不同的變量名。


    另外,希望大家養(yǎng)成良好的命名習(xí)慣,使自己的變量做到見名知意,這樣程序就可以自注釋了。比如,我們提倡這樣的變量名:myName,computerPrice。而不推薦類似 name1,variable3,hehe2,之類不知所云的名字。


    對于程序的編譯器來說,這樣并沒有什么用,因為它才不管你名字起得是不是見名知意。但是,對于你自己和以后要閱讀你的程序人來說,一個好的變量名會發(fā)揮很大的作用,不然過了一段時間再看自己的代碼,可能都忘了這個變量是用來干嘛的。


    小編自己有個變量命名習(xí)慣,此習(xí)慣不少程序員也遵守:


  • 變量名由小寫字母開頭

  • 如果變量名由幾個單詞組成,那么緊挨著寫

  • 除了第一個單詞,其他單詞的第一個字母大寫


  • 例如:


    bestRestaurantName,secondBugReport,等等。


    這樣的命名法也稱為《小駝峰式命名法(lower camel case)》。


    變量類型


    之前說了,變量除了有名字,還有類型。就好比“小明”這個名字,不知道是人呢還是一只寵物。


    C++的變量類型如下圖所示:



    有點多是嗎?初學(xué)時不用一下子都記住,我們慢慢來學(xué)習(xí)。一開始只要知道幾種常用的變量類型就可以了。如下:


    常用類型

    可以存儲的數(shù)值

    bool

    true(真)或false(假)

    char

    一個字符

    int

    整數(shù)

    unsigned int

    無符號整數(shù)(正整數(shù)或0)

    double

    帶小數(shù)點的數(shù)(其實double是雙精度浮點數(shù))

    string

    字符串(0到多個字符)


    一般,我們在IDE中輸入以上這些變量類型時,IDE會用顏色來高亮顯示。


    這些類型可儲存的數(shù)值有大小范圍,也就是上下限。比如有的很大的整數(shù),int類型就不能儲存。這些上下限取決于你的電腦,操作系統(tǒng)和編譯器。


    當(dāng)我們使用變量時,就需要考慮用哪種變量類型了。例如你要儲存一個學(xué)校的學(xué)生數(shù)目,那么int和unsigned int會適合。要儲存一個人的身高,那么用double會適合。要儲存你自己的名字,那么string會適合。


    那么bool這種變量類型是什么意思呢?


    bool其實是boolean(布爾類型)的意思,它只能儲存兩種值:true(真)或false(假)。


    我們可以用bool類型的變量來儲存例如: 用戶名是否正確,是不是程序員,有沒有女朋友,之類。



    變量聲明


    變量的英語是variable,是《可變的,變化不定的》,所以說,變量和女人的心有點像,不是嗎?開個小玩笑。


    因此,變量儲存的數(shù)值是可以改變的。


    好了,鋪墊也夠多了,該來正式請求電腦出借它的“抽屜”了(前面我們用抽屜比喻一塊內(nèi)存空間)。用術(shù)語來說,就是變量聲明。


    注意:我們暫時用《聲明》這個詞,其實要澄清一下:

    ==========================

    對 變量而言,聲明與定義的關(guān)系稍微復(fù)雜一些。在聲明部分出現(xiàn)的變量有兩種情況:一種是需要在內(nèi)存中建立存儲空間的(如int a;);另一種是不需要建立存儲空間的(如extern int a; ?以后會講到extern關(guān)鍵字)。前者稱為定義型聲明(defining declaration),或簡稱為定義(definition)。后者稱為引用型聲明(referenceing declaration)。


    廣 義地說,聲明包括定義,但并非所有的聲明都是定義。對 int a; 而言,它是定義性聲明,既可說是聲明,又可說是定義。而對 extern int a; 而言,它是聲明而不是定義。一般為了敘述方便,把建立存儲空間的聲明稱為定義,而把不需要建立存儲空間的聲明稱為聲明。


    在這一課中所有用到《聲明》的地方,其實用的是《定義型聲明》。以后的課會講解《引用型聲明》。

    ==========================


    我們需要向電腦提供變量的類型,名字和它儲存的值。這里的值會成為變量的初始值。


    為了做到這一點,我們只需按照以下格式:


    類型 ?名字 ?();


    以上的格式是C++中初始化一個變量的方式。


    我們也可以用另一種從C語言繼承過來的格式:


    類型 ?名字 ?= ;


    這兩種格式的效果是一樣的。我們推薦使用第一種格式,以后的課程中會講述為什么選第一種格式更好。


    可不要忘了句末的分號(;),這個錯誤即使是有經(jīng)驗的程序員也會犯。當(dāng)然這個錯誤也不難發(fā)現(xiàn),只不過它會讓你的編譯器不安分而已。


    我們就來聲明(定義型聲明)一個變量,這個變量叫做userAge,用于儲存《用戶年齡》:


    #include?<iostream>using?namespace?std;int?main() {int?userAge(16);return?0; }


    上面程序的第6行發(fā)生了什么呢?

    答:電腦得知我們要向它的內(nèi)存借一個“抽屜”,這個抽屜有以下特性:


  • 可以儲存整數(shù)

  • 抽屜外面貼了一個標(biāo)簽,名叫 userAge

  • 抽屜里儲存的值是16


  • 因此,一旦程序運行完了第6行代碼,你就成為電腦內(nèi)存中那個抽屜的主人了,如下圖:




    因為之后我們會繼續(xù)向電腦借很多“抽屜”,所以我們需要把圖畫得簡單些。如下:



    我們來解釋一下上圖的意思:


  • 大大的藍(lán)色矩形代表的是電腦的內(nèi)存,目前,內(nèi)存幾乎是空的。

  • ***的小正方形代表電腦出借給我們的內(nèi)存的一塊空間。也就是我們之前比喻的一個抽屜。它里面儲存的值是16,而它的標(biāo)簽是userAge。


  • 既然我們畫了如此好(chou)看(lou)的圖,那豈能只聲明一個變量。一不做二不休:


    #include?<iostream>using?namespace?std;int?main() {????int?userAge(16);int?money(432);??//錢數(shù)????double?pi(3.14159);????bool?isHoliday(true);?//是不是假期????char?letter('a');??return?0; }


    上面的程序中,我們在userAge這個變量之外,又聲明了好幾個新的變量。


    有兩點需要注意:


  • bool類型的變量只能儲存true或false中的一個值,不是true(真),就是false(假),除此之外不能儲存其他值。

  • char變量的值需要用單引號括起來,不要寫成 char letter(c); 而是 char letter('c');


  • 插一句題外話:寫程序時要勤寫注釋,哪怕看似比較簡單的地方,因為以后別人看你的程序,或者你自己回看自己的程序,假如沒有注釋,那可能會增加不少難度。


    對于上面這個程序,我們也可以畫一個圖,只要在之前的圖上增加新的變量即可。




    可以看到,我們多聲明了幾個變量,內(nèi)存里面開始變得豐富多彩起來了。馬上要圣誕了,人多一些總是熱鬧。


    上面的程序,我們?nèi)绻幾g,運行,可以看到它什么也沒有輸出。那是當(dāng)然的,因為我們只是聲明了一些變量,還沒使用它們呢。


    我希望你沒有太失望,雖然這個程序沒有顯示什么,但其實在背后電腦是進(jìn)行了很多操作的。只不過這些操作對用戶隱藏起來了,我們也不太感興趣而已。不過我們還是總結(jié)一下上面的變量聲明究竟做了什么:


  • 你的程序向操作系統(tǒng)(簡稱OS,是Operating System的縮寫。例如Windows,Mac OS X,Linux等都是常見的操作系統(tǒng))借一些內(nèi)存來使用

  • 操作系統(tǒng)查看內(nèi)存是否有空余的空間,如果有則分配幾個“抽屜”(代表內(nèi)存空間)給你的程序

  • 你的程序逐一將那些值存放進(jìn)對應(yīng)的抽屜。例如在貼有userAge標(biāo)簽的抽屜里,存放進(jìn)16;在貼有money標(biāo)簽的抽屜里存放進(jìn)432;等等

  • 運行到最后一行(return 0;)時,你的程序把所有抽屜清空,并且還給操作系統(tǒng)


  • 字符串的情況


    前面說了,字符串這種變量類型的情況有點特殊。為了使用字符串變量,我們首先需要在程序中多加一行:


    #include <string>


    表示引入string這個C++的標(biāo)準(zhǔn)庫,這樣我們才能使用其中的函數(shù)等。我們可以寫個程序:


    #include?<iostream> #include?<string>using?namespace?std;int?main() {string?userName("Steve?Jobs");return?0; }


    可以看到,我們聲明了一個字符串變量,它的名字是userName,里面存放的值是Steve Jobs(蘋果的前CEO)。


    可以看到,給string型變量賦值,用的是雙引號",而之前給char型變量賦值時用的是單引號'。其實呢,字符串(string)就是由一串字符(char)組成的。


    偷懶的小技巧


    在繼續(xù)下面的內(nèi)容之前,我們介紹一種“偷懶”的小技巧,很多程序員都會用:


    如果你有多個同一類型的變量要聲明,那么可以將它們放在同一行里,彼此用逗號隔開。如下:


    int?a(2),?b(4),?c(6);?//我們聲明了三個整型變量a,?b,?c,分別存放了2,?4,?6三個值string?userNameApple("Steve?Jobs"),?userNameMicrosoft("Bill?Gates");?? //我們聲明了兩個字符串變量userNameApple和userNameMicrosoft,分別存放Steve? Jobs(史蒂夫喬布斯)和Bill?Gates(比爾蓋茨)。


    這樣我們就不用每次都寫一遍變量類型名了,上例中是int和string。



    聲明但不初始化


    上面我們學(xué)習(xí)了如何聲明一個變量(其實是定義型聲明),其實聲明一個變量時你的程序陸續(xù)做了兩件事:


  • 首先,程序向操作系統(tǒng)請求撥給一塊內(nèi)存空間,稱為“變量分配”。

  • 然后,在這塊內(nèi)存空間上存入初始值,稱為“變量初始化”。


  • 但是,有的時候我們在聲明變量時還沒有想好要賦什么值。所以,我們也可以聲明變量,但不初始化。


    怎么做呢?很簡單,只需要寫變量類型和變量名,就可以了。如下:


    類型 ?名字;


    是不是很簡單呢?我們來看例子程序:


    #include?<iostream> #include?<string>using?namespace?std;int?main() {?????string?qqName;??//?QQ用戶名string?qqNumber;?//?QQ號bool?isVIP;?????//?是不是QQ的VIP會員return?0; }


    注意:有一個常見的錯誤是:

    在變量名之后加空的括號,例如 string qqNumber();

    這是不正確的,不要加括號,只需要類型和名字。


    我們也用圖解來演示上面的程序:




    可以看到,在聲明變量后,變量中的值是一個任意值。


    但是通常我們最好在聲明時給變量賦初值,特別是指針的情況,以后我們會學(xué)習(xí)。而且有的變量類型還必須在聲明時就初始化。



    顯示變量的值


    在上一課中,我們已經(jīng)學(xué)習(xí)了如何在屏幕上顯示文本,希望你沒有忘記大明湖畔的夏雨荷。


    是的,這位"夏雨荷"就是 cout<<


    cout有點類似C語言的printf函數(shù),是C++里面負(fù)責(zé)標(biāo)準(zhǔn)輸出的。不過又有不同,我們可以看到cout后面不是加括號,而是連接了<<這個特殊的符號。


    暫時我們不深入,因為cout其實不是一個函數(shù),cout是一個ostream類的對象(關(guān)于類和對象,之后的課程會講解),它有一個成員運算符函數(shù) operator<<(涉及到C++的運算符重載的技術(shù),以后會講)。(這一句指令暫時不需要理解,只要知道cout<<可以用來向屏幕輸出內(nèi)容即可)。


    那么機(jī)智如你,應(yīng)該猜到怎么顯示變量的值了吧。




    是的,就是把文本替換成變量名就行了。如下:


    cout?<<?userAge;


    這么簡單,你敢信?


    是的,就是這么簡單。


    #include?<iostream>using?namespace?std;int?main() {int?userAge(16);cout?<<?"你的年齡是?:?";cout?<<?userAge;return?0; }


    運行以上程序,顯示:


    你的年齡是 : 16


    當(dāng)然了,我們也可以同時顯示好幾個變量的值,并且把一句話的內(nèi)容都寫在一行上。如下:


    #include?<iostream> #include?<string>using?namespace?std;int?main() {int?userIQ(150);string?userName("Albert?Einstein");??//?阿爾伯特.愛因斯坦cout?<<?"你名叫?"?<<?userName<<?",?你的智商是?"?<<?userIQ<<?endl;return?0; }


    運行以上程序,顯示:


    你名叫 Albert Einstein, 你的智商是 150



    引用


    在結(jié)束這一課之前,我們還有一個很重要的知識點需要介紹。


    這個知識點就是:引用


    《引用》的英語是reference。


    我們之前說過,變量可以被看成內(nèi)存里的一個“抽屜”。這個抽屜外面可以貼標(biāo)簽,就是變量名。


    實際生活中,我們可以在同一個抽屜外面貼上不止一個標(biāo)簽。那么,在C++中,我們也可以給同一個內(nèi)存的“抽屜”上貼好多個標(biāo)簽。


    因此,我們就多了一種訪問變量的方式。就好像我們給變量取一個別名。但是別名聽起來沒有那么高大上,所以C++中稱之為“引用”。聽著是不是挺玄乎的,其實就是別名。


    我們可以用下圖來演示:




    可以看到,在內(nèi)存中的這個變量上,有兩個標(biāo)簽。一個是userAge,聲明此變量時起的變量名;另一個是myVariable,是它的別名,也就是引用。


    比如,黃曉明,也可以叫小明,兩個名字指代的都是那個人,都愛著Angelababy。


    那么引用怎么聲明呢?要用到一個特殊的符號:&


    int?userAge(16);??//?聲明一個變量,名字是userAgeint&?myVariable(userAge);?//?聲明一個引用變量,名叫myVariable,它是userAge變量的別名。


    可以看到,userAge放在了myVariable后面的括號里,還記得變量如何初始化嗎?就是在括號里填入初始值。因此,這里相當(dāng)于把userAge“賦值”給了myVariable


    說到底,userAge和myVariable指向的是同一個“抽屜”,同一個變量。它們的值都是16。


    用術(shù)語說就是:myVariable引用了userAge。


    引用變量的類型必須和它要引用的變量一樣。而且,引用變量聲明時必須賦初值。


    我們來看一個例子程序:


    #include?<iostream>using?namespace?std;int?main() {????int?userAge(16);?//?一個變量,名字是userAge,包含一個整型數(shù)值16????????int&?myReference(userAge);?//?變量userAge的一個引用????//?從現(xiàn)在開始,我們可以不加區(qū)分地使用userAge或myReference????//?因為它們實際上是一個內(nèi)存中“抽屜”的兩個標(biāo)簽,指向的是相同內(nèi)容????cout?<<?"你已經(jīng)?"?<<?userAge?<<?"??歲了.?(通過?變量名)"?<<?endl;????//?慣常的方式????cout?<<?"你已經(jīng)?"?<<?myReference?<<?"?歲了.?(通過?引用)"?<<?endl;????//?用引用的方式來訪問變量值????????return?0; }


    運行以上程序,顯示:


    你已經(jīng) 16 歲了. (通過 變量名)

    你已經(jīng) 16 歲了. (通過 引用)


    那么,引用到底有什么用呢?


    好問題。在上面的例子中,仿佛看不出引用有多大用處。


    也許暫時你覺得引用比較抽象,也貌似沒什么用。但是要知道,引用是C++中很重要的一塊知識點,而且以后我們會“大寶啊,天天見”,會經(jīng)常使用到“引用”的。而且還會區(qū)分什么時候用引用,什么時候用指針。


    因此,先對引用的概念有個了解,對我們之后處理更復(fù)雜的用例是大有裨益的。



    總結(jié)


  • 變量是存儲在內(nèi)存里的一段信息

  • 根據(jù)存儲的信息的不同,變量有不同類型:int,char,bool,double,等

  • 變量在使用前需要先聲明,例如:int number(28); // 此處是定義型聲明

  • 可以用cout來顯示變量的值

  • 引用其實是變量的別名,有點像標(biāo)簽,使我們可以用另一個名字來調(diào)用變量,例如:int& numberReference(number);



  • 第一部分第五課預(yù)告


    今天的課就到這里,一起加油吧!

    下一課我們學(xué)習(xí):簡易計算器

    轉(zhuǎn)載于:https://blog.51cto.com/4526621/1726888

    總結(jié)

    以上是生活随笔為你收集整理的【C++探索之旅】第一部分第四课:内存,变量和引用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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