讀C Primer的一點發現

2022-09-12 06:39:14 字數 3423 閱讀 7358

1.識別符號不能包含兩個連續的下劃線__,也不能以下劃線開頭後面緊跟乙個大寫字母

在函式體外定義的識別符號不能以下劃線開頭

int__a = 1;

cout << a << endl;

//錯誤1error c2065: 「a」: 未宣告的識別符號d:\documents\visual studio 2013\projects\實驗**\實驗**\源.cpp91實驗**

2.內建型別變數的初始化

如果沒有手動的初始化的話,在函式體外定義的變數編譯器會自動初始化為0

函式體內的則不自動初始化

#include

#include

using namespace std;

int a;

int main()

empty

3.unsigned   signed

當賦值大於兩者的取值範圍時對於unsigned編譯器會對儲存的數對型別大小進行求模,對型別賦值(特別是負值,對unsigned一般負值都是求模儲存//如-1的unsigned int為-255

對於signed型別編譯器不同行為也不同,但一般也是求模儲存

4.const型別預設為檔案的區域性變數,如果要在別的檔案中使用需要加extern,非const變數預設為extern

5.const 引用可以初始化為不同型別的物件,或者為右值,非const型別的引用不可以

double i = 4.20;

int j = 1;

const int &k = i;//ok

這裡是因為將double型別的變數給int型別的引用的時候會發生

././int tmp = 4;

//const int &k = tmp;

從而不能通過引用指向它原來的值

int &n = i;//err

const int &m = 1;//ok

int &n = 1;//err

6.enum的成員是常量表示式//這個東西我是真的沒用過

預設他的第乙個列舉成員賦值為0,後面的每個成員會比前面的大一

7.vector 如果沒有指定初始化方式,標準庫將自動的提供乙個元素初始值進行初始化

1)< >中為內建型別將用0初始化

2)< >中為含有建構函式的類,則使用預設建構函式進行初始化

3)< >中為不含建構函式的類-仍將產生乙個帶初始值的物件,但不知道是啥

8.c++在for迴圈是判斷條件一般優先考慮 !=號//這個也不知道為什麼,等以後知道了在說吧

9.while (cin>>i)  while(cout<

這種在c++中是支援的,因為cin和cout在定義中過載了()

如果你把乙個basic_ios類的物件(cin就是)放到if語句的括號裡,它就會被轉換成void*型。如果輸入失敗的話,就會得到乙個空指標(也就是0),那麼if語句就不能通過。

operator

void*() const

//上述**來自網上

10.vector ::iterator mid = (d.begin() + d.end()) / 2;這個是不行

11.goto語句和switch case語句中跳過變數的定義部分參生的問題及解決

變數var(_variant_t)的定義在goto之後,在跳轉到的語句塊之前被宣告,因此編譯器就會出現編譯錯誤。

小結:1. 使用goto語句時對pod物件進行操作時,該在goto使用之前進行定義,

避免在goto語句和跳轉程式塊之間宣告該語句或者引用起來

2. switch-case語句而言,應該將各個case語句用引用起來,使其形成乙個獨立的程式模組

12.沒有顯示提供初值的陣列會和普通元素一樣初始化

1)在函式體外定義的內建型別陣列,其元素皆初始化為0

2)在函式體內定義的內建型別陣列,其元素皆不初始化

3)不管陣列在**定義,如果其元素為類型別,則自動地呼叫該類的預設建構函式進行初始化;如果該類沒有預設建構函式,則必須為該陣列的元素提供顯示的初始化

13.對指標進行初始化或賦值

如果初始化或者賦值為0值常量表示式

1)0的整形const物件

2)字面值常量0

int ival;

int zeor = 0;

const int c_ival = 0;

int *pi = ival;  //err

pi = zeor;   //err

pi = c_ival;   //ok

pi = 0;   //ok

14.指標和typedef

下面是乙個幾乎所有人剛開始接觸指標都會犯的錯誤

typedef string *pstring;

const pstring cstr;

請問cstr是什麼型別?

const string *str;  //err

string *const str;  //

pstring 是乙個貨真價實的指標,所以const修飾的是乙個指標

15.const 放在型別前面和後面沒有任何區別

string const *str;

const string *str;

16.在 ibm pc及其相容機中,以ctrl + z表示檔案結束符。在unix和macintosh系統中,以

ctrl + d表示檔案結束符。

17.int getchar(void);

【引數】該函式沒有引數。

【返回值】函式的返回值為使用者輸入的第乙個字元的ascii碼,若出錯返回-1,且將使用者輸入的字元回顯到螢幕。如果使用者在按回車鍵之前輸入了不只乙個字元,其他字元會保留在鍵盤緩衝區中,等待後續getchar()呼叫讀取。也就是說,後續的getchat()呼叫不會等待使用者按鍵,而是直接讀取緩衝區中的字元,直到緩衝區的字元讀取完畢後,才等待使用者按鍵。

18.c++對ends的處理時一樣的,都是在緩衝區插入'\0'然後重新整理,之所以在不同的系統下的顯示情況不同是因    為,windows和linux對'\0'的處理方式不同,在windows中會輸出乙個空格,而linux下則不會有什麼輸出。

19.操作符過載

= -> ()不能使用友元過載是因為他們在類中已經被預設的賦予了相應的功能

例如 = 操作符 base a = 1;

相當於呼叫了  a(1); 如果再在類的外部過載了 = 操作符,編譯器將不知道呼叫哪個,所以直接不允許這樣做

其他的3個操作符也是這樣的原因

20.const 的物件只能呼叫const的成員函式,int max() const;

const 物件只能呼叫常函式的原因是因為類的成員函式都有乙個隱藏的this指標,而常成員函式的this指標是const型別的  int max (const 類名 *this) const;

const物件的this指標為const型別的所以只能呼叫const成員函式,而非const物件也可以呼叫常成員函式

進製轉換規律的一點發現

前兩天刷題刷到這樣一道題目,然後問了大佬這種解法的思路,才恍然大悟.題意 給乙個長度不超過 18 的 01 串,你需要輸出這個串在 2,3,4,5,6,7,8,9,10 進製表示下的數值在 10 進製下的和。輸入描述 第一行是乙個正整數 t t 100000 表示測試資料的組數,接下來 t 行,每行...

瀏覽Python官網之後的一點發現和收穫

首先,官網有源 分享的模組。而在其他python開源分享 上,很多較為複雜 很有創意的 也會被分享。這與其他程式語言不同,其他語言會生成執行檔案,而使用者僅可以進行使用,並無法得知程式的源 這在某種程度上會保護 編寫者的版權及利益。而python不同,這並不是程式設計師們約定俗成的,而是python...

讀C Primer 一點收穫

以前總是看別人的部落格,且聽說搞it的應該有總結收穫和分享的習慣,於是乎有了寫的衝動。最近剛看完c primer 4th,感覺收穫還是挺多的,借部落格記錄之。看這本書的動機一大半是問了充實自己便於兩年後的找工作。之前對c 的了解完全 於大 一 大2時的課程。從類之後時,就開始一頭霧水了,最多也是課上...