1.列舉變數的值如何計算?
在列舉中,某個列舉變數的值預設為前乙個變數的值加1,如果第乙個列舉變數沒有賦值,則預設為0。
如:enum
則實際上是a=0,b=5,c=6,d=4,e=5
從這個例子中可以看出列舉變數值是可以重複的。
2.字元陣列與字元指標的區別
看下面乙個例子:
const char str1=」abc」;
const char str2=」abc」;
const char* str3=」abc」;
const char* str4=」abc」;`
str1和str2兩個字元陣列都儲存在棧空間上,它們的值是各儲存區的首位址,兩者不相同;而str3 和str4並非字元陣列而是字元指標,並不分配儲存區,其後就得「abc」以常量的形式儲存於常量區,str3 和str4是指它們指向的位址的首位址,而它們僅是指向該區首位址的指標,所以相等。
3.c++裡面是不是所有的動作都是main()函式引起的?
不是,對於c++程式而言,靜態變數、全域性變數、全域性物件的分配早在main()函式之前已經完成。並不是所有的動作都是從main()函式引起的,只是編譯器是由main()開始執行的,main()是乙個約定的函式入口。在main()函式中的顯示**執行之前,會呼叫乙個由編譯器生成的_main()函式,而_main()函式會進行所有全域性物件的構造和初始化工作。
當程式退出時,全域性變數必須銷毀,如果有全域性物件則會呼叫給相應的全域性物件的析構函式。
4.a是變數,執行(a++)+=a語句是否合法?
首先引入左值和右值的概念。
左值:可以被改變,儲存資料值的那塊記憶體的位址,也稱為變數的位址
左值可以作為右值,但右值不可以作為左值
本題不合法,a++不能當做左值使用,a++表示取a的位址,把它的值裝入暫存器,然後對記憶體中a的值執行加一操作;++a可以當左值使用,表示取a的位址,對它的內容進行加一操作,然後把值放入暫存器中。
a++的運算結果並不是a這個變數的引用,而是乙個臨時變數,不允許作為左值使用,甚至編譯器不允許對乙個臨時變數重新賦值,上面的表示式會引起編譯錯誤。
5.如何進行float、bool、int、指標變數與」零值「的比較?
考察對0值的判斷是衡量程式設計師基本功的重要標準,不同變數與零值判斷,往往方法也不一樣。
(1)int型別
與0進行數值上的比較
if(n==0)
if(n!=0)
(2)float型別
無論是float還是double型別的變數,由於他們在記憶體中的儲存機制與整型數不同,有捨入誤差,所以在計算機中,大多數浮點數都是無法精確表達的,在判斷浮點數相等時,推薦用範圍來確定:
const
float epsinon=0.00001;
if((x>=-epsinon)&&(x<=epsinon)
(3)bool型別
表明其為「邏輯」判斷
if(flag)
if(!flag)
(4)指標型別
if(p=null)
if(p!=null)
6.new/delete和malloc/free的區別是什麼?
new與malloc動態申請的記憶體都位於堆中,無法被作業系統自動**,需要對應的delete與free來釋放空間,但是delete或free僅僅是告訴作業系統,這一塊記憶體被釋放了,可用作其他用途。但是由於沒有重新對這塊記憶體進行寫操作,所以記憶體中的變數數值並沒有發生變化,出現野指標的情況。因此,釋放記憶體後,應該將指標指向置為空(null)。
具體而言,new/delete與malloc/free的區別主要表現在以下幾個方面:
(1). new能夠自動計算需要分配的記憶體空間,malloc則需要手工計算位元組數
int* p1=new
int[2];
int* p2=malloc(2*sizeof(int));
(2).new 與delete直接帶具體型別的指標,malloc與free返回void型別的指標
(3).new是型別安全,malloc不是
int* p=new
float[2]; //編譯時就會報錯
int* p=malloc(2*sizeof(float));//編譯時編譯器無法指出錯誤來
(4).new將呼叫建構函式,delete將呼叫析構函式,而malloc 和free不能夠呼叫
(5).malloc/free需要包含庫檔案stdlib.h;new/delete則不需要庫檔案支援
既然new/delete(c++運算子)的功能完全覆蓋了malloc/free(c/c++語言的標準庫函式),為什麼在c++中沒有取消掉malloc/free呢?其實,由於c++程式經常呼叫c函式,而c程式只能用malloc/free管理動態記憶體,所以在c++中仍然保留了malloc/free。
零碎知識點
1.反斜槓也可拼接字串 window.nl ad function window.nl ad function 2.在console.log 中新增樣式 var a hello console.log c a,font size 400 background blue color white 3 通...
零碎知識點
比較數值時,不要integer,要int 1,elasticsearch查詢時不識別大寫,應全部轉為小寫.因此建立索引時盡量使用小寫 2.var param param.yanan1 yanan2 此處的用法 param 宣告了json格式的param,param.yanan1 yanan2定義了j...
彙編零碎知識點
條件碼 of overflow flag 溢位標誌,溢位時為1,否則置0.標明乙個溢位了的計算,如 結構和目標不匹配.sf sign flag 符號標誌,結果為負時置1,否則置0.zf zero flag 零標誌,運算結果為0時置1,否則置0.cf carry flag 進製標誌,進製時置1,否則置...