c/c++的內容又多又雜,常常看到有人羅列相關書單,覺得毫無意義,我不相信他們真的完全掌握了其中任何一本。學習任何東西,首先要掌握基本概念,基礎不牢地動山搖,因為高階的內容都是通過低階的概念來描述的。當基本概念都沒理解透,學習再多都是空中樓閣。這裡羅列了一些聽基本的問題,雖然看著不難,但是精確理解每句話中的每個詞真的並不容易。
變數宣告和定義區別?
"零值比較"?
strlen和sizeof區別?(編譯期&&執行期)
同一不同物件可以互相賦值嗎?(深淺拷貝)
結構體內存對齊問題?
static作用是什麼?在c和c++中有何區別?
結構體和類的區別?
c++中結構體也可以繼承。
malloc和new的區別?
指標和引用區別?- c++編譯器在編譯過程中使用常指標作為引用的內部實現,因此引用所占用的空間大小與指標相同;指標是具體變數,需要占用儲存空間。
巨集定義和函式有何區別?
巨集定義和const區別?
巨集定義和typedef區別?
巨集定義和內聯函式(inline)區別?
條件編譯#ifdef, #else, #endif作用?
區別以下幾種變數?
const int a;
int const a;
const int *a;
int *const a;
關鍵問題點:const 屬於修飾符 ,關鍵是看const 修飾的位置在那裡volatile有什麼作用?什麼是常引用?1、const int *a
這裡const 修飾的是int,而int定義的是乙個整值
因此*a 所指向的物件 值 不能通過 *a 來修改,但是 可以重新給 a 來賦值,使其指向不同的物件
eg:const int *a = 0;
const int b = 1;
int c = 1;
a = &b // 額外:注意不能通過a 來修改 b值
a = &c // 額外:雖然c本身不是乙個常量
*a = 2 //error 為題就在這裡,不能修改通過 *a 所指向的物件值,最後賦值得物件是c,因此不能通過*a 來修改c值。
2、int *const a
這裡const修飾的是 a ,a代表的是乙個指標位址
因此不能賦給a其他的位址值,但可以修改a指向的值
這有點和cont int *a相反的意味,例子就不說了
3、至於int const *a 和 const int *a 的意義是相同的 他們兩個的作用等價
補充:4、const int * const a
這個代表a所指向的物件的值以及它的位址本身都不能被改變
5、 const int *const a
a所指向的物件及物件的值均不可改變。
關於const的點滴補充:
1、const 物件的位址只能賦值給指向const 物件的指標
2、指向const 物件的指標可以 被賦 以 乙個非const 物件的位址
3、指向const 得指標常被用作函式的形式引數,保證被傳遞給函式的實際物件在函式得實際物件在函式中不會被修改
4、常量在定義後就不能被修改,所以它必須被初始化。未初始化的常量定義將導致編譯錯誤(上面都是在說明const得問題,所以沒有賦值,實際語句中要賦值的)
區別以下指標型別?
int *p[10]
int (*p)[10]
int *p(int)
int (*p)(int)
常量指標和指標常量區別?
a和&a有什麼區別?
假設陣列int a[10];
int (*p)[10] = &a;
陣列名和指標(這裡為指向陣列首元素的指標)區別?
野指標是什麼?
堆和棧的區別?
申請大小限制不同。
申請效率不同。
delete和delete區別?
c 基礎彙總 封裝
說到封裝,其實是比較基礎類的問題,它為程式設計提供了系統與系統,模組與模組,類與類之間互動的實現手段。在.net中,一切看起來都已經被包裝在.net framework這一複雜的網路中,提供給最終開發人員的是成千上萬的型別,方法和介面,而framework內部一切已經做好了封裝。作為乙個初級gis程...
c 基礎學習彙總 繼承
封裝,繼承,多型。這是物件導向的思想,也可以說是最基本的東西。說到繼承,直接的說他就是物件導向中類與類之間的一種關係。通過繼承,使得子類具有父類公有的受保護訪問許可權的屬性和方法,同時子類可以通過加入新的屬性和方法或者修改父類的屬性和方法建立新的類層次。繼承機制體現了物件導向技術中的復用性,擴充套件...
C 基礎知識彙總 入門
六 內聯函式 七 auto關鍵字 c 11 八 基於範圍的for迴圈 c 11 九 指標空值nullptr c 11 使用cout標準輸出 控制台 和cin標準輸入 鍵盤 時,必須包含 iostream 標頭檔案以及std標準命名空間。使用c 輸入輸出更方便,不需增加資料格式控制,比如 整形 d,字...