c 拾遺 復合型別

2021-07-09 22:14:51 字數 3475 閱讀 2576

1、cout拼接字串常量

任何兩個由空白分隔的字串常量都將自動拼接成乙個

cout

<<"hello "

"world"

<<"hello world\n";

cout

<<"hello "

"world\n";

2、sizeof和strlen區別

3、cin與cin.get()及cin.getline()

cin使用空白(空格,製表符,換行符)來確定字串的結束位置,在讀取第乙個單詞後,自動在其最後加上空白符,存入陣列,剩下的單詞留在輸入佇列,並不回丟棄換行符。

cin.getline()通過回車鍵輸入的換行符確定輸入結尾。引數一:存放輸入的陣列名,讀取的字元數,如果這個引數為20,那麼最多讀取19個字元,剩餘的空間用於儲存自動在結尾處新增的空白符,getline在讀取指定數目的字元或遇到換行符時停止讀取。但當快取中的字元個數超過讀取字元個數,cin的failbit將被置為true,需呼叫cin.clear()清除錯誤標誌。

cin.get()

方式一:與getline類似,引數相同,也讀到行尾,但並不在讀取並丟棄換行符,而是將其留在輸入佇列中

4、c與c++結構體宣告

在c中建立結構體有2種方式

struct mystruct

;

宣告變數:struct mystruct mystruct;

typedef

struct tag_mystruct

mystruct,*pmystruct;

宣告結構體別名,上述語句等價於

struct tag_mystruct

;typedef tag_mystruct mystruct;

typedef tag_mystruct *pmystruct;

宣告變數:

mystruct mystruct;

pmystruct pmystruct;

在c++中可以直接使用struct定義結構體,並且可以在定義時直接宣告

struct mystruct

mystruct;

在定義結構體的同時可以宣告變數。

5、共用體

union myunion

}myunion;

儲存空間大小以最大的為準,上例為mystruct大小,只儲存乙個成員的值,

成員不能包括靜態,引用,類。

6、列舉

預設情況下第乙個列舉量值為0。列舉量是整形,可以被提公升為int形,但int形不能自動轉換為列舉型別.同時可以定義該型別列舉變數,並為其賦值,但不能超出該型別範圍,同時只能使用列舉量給列舉變數賦值。

enum

myenum;

int color=red+1;//valid

myenum myenum=yellow;//valid

//使用+號意味著yellow和orange轉為int,相加後無法在賦值給列舉變數

myenum myenum2=yellow+orange;//invalid

當然也可以給列舉量賦值

enum myenum;

/*red=0;

orange=10;

yellow=10;

green=11;

*/

可以給列舉量賦相同的值,沒有初始化的將比上乙個列舉量大一。

7、指標

使用new來分配記憶體

宣告指標並分配記憶體空間

int *p=new

int;

使用delete刪除分配空間

建立動態陣列,建立完成後刪除。

#include

int main()

使用new和delete應當遵從以下規則:

加減運算

與整數相加

加1的結果等於在原來的位址上加上指向的物件占用的總位元組數

int a[4]=;

int *p=a;

int temp=*(p+2);

//temp為2

指標相減

當兩個指標指向同一陣列時,兩指標相減得到間隔

int a[4]=;

int*p=a;

int*q=&a[4];

int diff=q-p;//diff為3

指標常量與常量指標

指標常量,指標指向記憶體的位址不能改變,必須在宣告時初始化;

int a=8;

int *const p=&a;

*p=5;

p++;//error

常量指標,指標指向記憶體的內容不能改變

int a=5;

int b=4;

const

int *p;

p=&a;

p=&b;

*p=5;//error

8、自動儲存、靜態儲存和動態儲存

1、自動儲存

在函式內部定義的常規變數使用自動儲存空間,在所屬函式被呼叫時建立,在函式結束時消亡。儲存在棧中。占用記憶體總是連續的。

2、靜態儲存

在程式整個執行期間都存在的儲存方式,是變數稱為靜態的方式有兩種:在函式外定義變數;在宣告變數時使用static關鍵字。

3、動態儲存

使用new和delete分配或釋放記憶體,變數的生存週期不受程式或函式生存時間控制,記憶體區域稱為堆。占用記憶體並不一定連續

9、模板類vector與模板類array

vector

使用前需包含標頭檔案vector,vector在std空間中,可以指定不同的儲存資料型別,可以指定元素個數

#include

int main()

使用new和delete來管理記憶體,效率不高,基本用法:vector vt(n_elem),建立乙個名為vt的vector物件,可以儲存n_elem個typename型別元素

array

使用前需包含標頭檔案array,同樣宣告在std空間中,基本用法:array arr;n_elem不能為變數,可以直接將乙個array物件賦值給另乙個array物件

相同點

都可以使用標準陣列表示法來訪問各元素

可以使用at()訪問元素,能夠檢測下標超界,但效率較低

不同點

array與陣列都儲存在棧中,而vector儲存在自由儲存區

C語言拾遺

main函式引數 c語言規定main函式引數只能有兩個,習慣上這兩個引數寫成argc和argv。c語言還規定argc必須是整形變數,argv必須是指向字串的指標陣列。因此,main函式的函式頭應該寫為 main argc,argv int argc char argv 或者 main int arg...

C 點滴拾遺

1.成員變數的初始化順序,與建構函式中初始化列表的順序無關,與成員變數申明的順序一致 多繼承中,基類的構造順序,與派生類的建構函式初始化列表中基類的構造順序無關,與定義派生類時基類的申明順序有關 2.友元關係不能繼承。3.指標和typedef typedef int pint int i 1 con...

C 拾遺 目錄

c 語言標準更新很慢,截止到本文為止,最新的是c 11和c 14標準。c 是一門很有魅力,但也的確很難的程式語言,能夠稱得上精通它的人的確不多。本序列不致力於寫成c 的百科全書,而是基於最新標準對一些語言上的難點和易於被大多數人忽略的語言點,進行 故名拾遺。基礎 name cast 顯式型別轉換 引...