今天零碎學習的小知識點

2021-07-08 12:12:59 字數 2585 閱讀 9343

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,否則置...