char *str1="absdhfghfe";
char str2="absde";
char str3[8]=;
char ss = "0123456789";
cout
<<"str1 "
<<<"str2 "
<< sizeof(str2)<<"str2 "
<<<"str2 "
<首先說明一點,char型別佔乙個位元組,所以sizeof(char)是1,這點要理解。
str1是乙個指標,只是指向了字串「absde」而已。所以sizeof(str1)不是字串佔的空間也不是字元陣列佔的空間,而是乙個字元型指標佔的空間。所以sizeof(str1)=sizeof(char*)=4,在c/c++中乙個指標佔4個位元組。
str2是乙個字元型陣列。c/c++規定,對於乙個陣列,返回這個陣列佔的總空間,所以sizeof(str2)取得的是字串」absde」佔的總空間。」absde」中,共有a b s d e \0六個字元,所以str2陣列的長度是6,所以sizeof(str2)=6*sizeof(char)=6
str3已經定義成了長度是8的陣列,所以sizeof(str3)為8
str4和str2類似,』0』 『1』 … 『9』加上』\0』共11個字元,所以ss佔的空間是11.
總之,對於指標,sizeof操作符返回這個指標佔的空間,一般是4個位元組;而對於乙個陣列,sizeof返回這個陣列所有元素佔的總空間。char*與char容易混淆,一定要分清,而且char*=」aaa」的寫法現在不被提倡,應予以避免
而strlen不區分是陣列還是指標,就讀到\0為止返回長度。而且strlen是不把\0計入字串的長度的。
1) 全域性靜態變數
在全域性變數之前加上關鍵字static,全域性變數就被定義成為乙個全域性靜態變數。
a.記憶體中的位置:靜態儲存區(靜態儲存區在整個程式執行期間都存在)
b.初始化:未經初始化的全域性靜態變數會被程式自動初始化為0(自動物件的值是任意的,除非他被顯示初始化)
c.作用域:全域性靜態變數在宣告他的檔案之外是不可見的。準確地講從定義之處開始到檔案結尾。
好處:
定義全域性靜態變數的好處:
(1)不會被其他檔案所訪問,修改
(2)其他檔案中可以使用相同名字的變數,不會發生衝突。
2).區域性靜態變數
在區域性變數之前加上關鍵字static,區域性變數就被定義成為乙個區域性靜態變數。
a)記憶體中的位置:靜態儲存區
b)初始化:未經初始化的全域性靜態變數會被程式自動初始化為0(自動物件的值是任意的,除非他被顯示初始化)
c)作用域:作用域仍為區域性作用域,當定義它的函式或者語句塊結束的時候,作用域隨之結束。
注:當static用來修飾區域性變數的時候,它就改變了區域性變數的儲存位置,從原來的棧中存放改為靜態儲存區。但是區域性靜態變數在離開作用域之後,並沒有被銷毀,而是仍然駐留在記憶體當中,直到程式結束,只不過我們不能再對他進行訪問。
當static用來修飾全域性變數的時候,它就改變了全域性變數的作用域(在宣告他的檔案之外是不可見的),但是沒有改變它的存放位置,還是在靜態儲存區中。
3). 靜態函式
在函式的返回型別前加上關鍵字static,函式就被定義成為靜態函式。
函式的定義和宣告預設情況下是extern的,但靜態函式只是在宣告他的檔案當中可見,不能被其他檔案所用。
定義靜態函式的好處:
(1)其他檔案中可以定義相同名字的函式,不會發生衝突
(2)靜態函式不能被其他檔案所用。 儲存說明符auto,register,extern,static,對應兩種儲存期:自動儲存期和靜態儲存期。 auto和register對應自動儲存期。具有自動儲存期的變數在進入宣告該變數的程式塊時被建立,它在該程式塊活動時存在,退出該程式塊時撤銷。
關鍵字extern和static用來說明具有靜態儲存期的變數和函式。用static宣告的區域性變數具有靜態儲存持續期(static storage duration),或靜態範圍(static extent)。雖然他的值在函式呼叫之間保持有效,但是其名字的可視性仍限制在其區域性域內。靜態區域性物件在程式執行到該物件的宣告處時被首次初始化。
*特點: static區域性變數的」記憶性」與生存期的」全域性性」
所謂」記憶性」是指在兩次函式呼叫時, 在第二次呼叫進入時, 能保持第一次呼叫退出時的值.*
解答:
bool 型變數:if(!var)
int 型變數: if(var==0)
float 型變數:
const float epsinon = 0.00001;
if ((x >= - epsinon) && (x <= epsinon)
指標變數: if(var==null)
剖析:
考查對 0 值判斷的「內功」,bool 型變數的 0 判斷完全可以
寫成 if(var==0),而 int 型變數也可以寫成 if(!var),指標變數
的判斷也可以寫成 if(!var),上述寫法雖然程式都能正確執行,
但是未能清晰地表達程式的意思。
一般的,如果想讓 if 判斷乙個變數的「真」、「假」,應直
接使用 if(var)、 if(!var),表明其為「邏輯」判斷;如果用 if 判
斷乙個數值型變 量(short、int、long 等),應該用 if(var==0),
表 明 是 與 0 進 行 「 數 值 」 上 的 比 較 ; 而 判 斷 指 針 則 適 宜 用
if(var==null), 這是一種很好的程式設計習慣。
*浮點型變數並不精確,所以不可將 float 變數用「==」或「!
=」與數字比較*,應該設法轉化成「>=」或「<=」形式。如果寫成
if (x == 0.0),則判為錯,得 0 分。
浮點數在記憶體中的存貯機制和整型數不同,有***捨入誤差***,在計算機中用以近似表示任意某個實數。具體的說,這個實數由乙個整數或定點數(即尾數)乘以某個基數(計算機中通常是2)的整數次冪得到,這種表示方法類似於基數為10的科學記數法。
所以浮點數在運算過成功運算通常伴隨著因為無法精確表示而進行的近似或捨入。但是這種設計的好處是可以在固定的長度上儲存更大範圍的數。
例如,乙個指數範圍為±4的4位十進位制浮點數可以用來表示43210,4.321或0.0004321,但是沒有足夠的精度來表示432.123和43212.3(必須近似為432.1和43210)。當然,實際使用的位數通常遠大於4。
所以浮點數不能夠判斷相等,像 if(x==0)的這樣的編碼是不總是正確的,我們在判斷浮點數相等時,推薦用範圍來確定,若x在某一範圍內,我們就認為相等,至於範圍怎麼定義,要看實際情況而已了,float,和double 各有不同
所以const float epsinon = 0.00001;
if ((x >= - epsinon) && (x <= epsinon) 這樣判斷是可取的
至於為什麼取0.00001,可以自己按實際情況定義
bool judge(int p,int n)
else
return
false;
}}
電子科技協會軟體入門培訓(2)
答案課外了解 讀入三個整數,按每個整數佔8個字元的寬度,右對齊輸出它們。輸入 只有一行,包含三個整數,整數之間以乙個空格分開。輸出 只有一行,按照格式要求依次輸出三個整數,之間以乙個空格分開。樣例輸入 123456789 0 1樣例輸出 123456789 0 1描述 輸入乙個單精度浮點數,將其向零...
北京科技周來啦!黑科技 硬科技統統都有,速來圍觀!
ai技術如何助力疫情防控?適老小屋是什麼樣的?智慧型城市怎麼體現?科技扶貧做了哪些工作?這些問題www.cppcns.com,在 2020 年北京科技週上,都能找到答案。2020 年北京科技周于 8 月23 2程式設計客棧9 日舉行。本屆北京科技周首次採用 雲上 形式,展出北京建設全國科技創新中心的...
優卡科技聚焦科技賦能,重點布局金融科技領域
隨著科技技術不斷發展,對於金融科技公司而言,科程式設計客棧技賦能 的驅動力將越來越彰顯出來,同時,消費金融行業正在邁入與科技加速融合 科技與金融場景緊密結合 積極創新的高質量階段,越來越多的金融行業參與者開始注重科技的力量,其中,金融科技行業參與者優卡科技正在聚焦科技賦能,重點布局金www.cppc...