【30日間学習C++primerシリーズ】day 2:基礎記憶の変数と基本タイプ(1/2).20160111

4380 ワード

勉強は堅持することが大切だ.毎日25 pageで『C++primer』という大山書をかじります.プログラミングの道を歩いている仲間たちは一緒に勉強しています.
完全なシリーズ
【30日間C++primerシリーズの勉強】day 1:新しい旅.-20160110
【30日間学習C++primerシリーズ】day 2:基礎記憶の変数と基本タイプ(1/2).20160111
知識点の要点:1.基本内蔵タイプ、2.変数、3.ふくごうへんすう
対応内容:『C++Primer(第五版)』【P 26-P 53】第二章:変数と基本タイプ(2.1-2.3)
1.基本内蔵タイプ
演算タイプ(char,int,bool,floatなど)と空タイプ(void)が含まれています.空のタイプは具体的な値に対応せず、いくつかの特殊な場合に使用されます.
(1)算数タイプ:分割型(int,bool,char)と浮動小数点型.
--以下はC++の演算タイプのみを羅列し、具体的には記憶しない.(bool,char,wchat_t:ワイド文字,char 16_t:Unicode文字,char 32_t,short,int,long,long long,float,double,long double).
--符号付きと符号なしタイプ:boolと拡張文字型を除き、符号付きは正、負、0を表すことができる.符号なしでは負以外の数しか表示できません.このうちint,short,long,long longには記号が付いている.unsignedを付けることで符号なしタイプに変更できます.文字型はchar、signed char、unsigned charに分けられます.charシンボルの有無はコンパイラで決定します.
(2)タイプ変換--あるタイプが別のタイプに強制的に割り当てられた場合
--ブール値:0はfalse、0以外はtrueです.ブール値は他のタイプと同じです.
--浮動小数点数to整数:小数点以下の前の部分のみを保持します.整数to浮動小数点数、小数部は0とします.
--符号なしタイプには、合計数に対して初期値が型抜きされた後の剰余金として、範囲外の値が割り当てられます.例えば8 biteのunsigned charは0-255を表し、区間外値が付いているように256に対して型を取った残数である.-1与えられた結果は255です.
--記号タイプ付きの範囲外の数、結果としてundefinedであり、プログラムが作業を継続したり、クラッシュしたり、ゴミデータを生産したりする可能性があります.
(3)符号なしタイプの式
--符号なしとintが混在している場合、intは符号なしの値に変わります(型取りの原則に従います).符号のない値を含む演算は、必ず負の値ではありません(型取り原則変換)
--忠告:符号付きタイプと符号なしタイプを混用しないでください.
(4)字面定数:変数を初期化する
--42,1024,0 x 14,3.1415はいずれも字面定数である.その形式と値はデータ型を決定します.
--文字と文字列のフォント値:'a':文字のフォント値、単一引用符;「Hello」:文字列の文字面値、二重引用符を使用します.2つの文字列のフォント値が隣接し、スペース、インデント、または改行のみで区切られている場合は、それらは全体です.
--転送シーケンス:リストのみを作成します(改行、tタブ、bチェックアウト、\反斜線、rリターン、'、?
--ブール値の字面:tureとfalse;ポインタ字面:nullptr.
2.変数
変数とオブジェクトはC++で同じ意味です.
(1)定義:タイプ説明子+1つ以上の変数名リストをカンマで区切り、セミコロンで終了します.例:
int sum = 0, value, units_sold = 0;
Sales_item item;
std::string book( " 1-2-3-X");//book  string      
--初期値:変数を初期化するために使用され、先に定義した変数値で初期化して定義できる変数値.
--リスト初期化:カッコで初期化
double price = 31.99, discount = price * 0.6;
int i = {0};
int i{0}, b{i};
--デフォルト初期化:関数体外変数のデフォルト初期化は0または空であり、関数体内に内蔵されている変数は初期化されません.
(2)宣言と定義の関係:extern
C++は分離コンパイルをサポートします.書き込みの区別を宣言および定義できます.宣言は名前をプログラムで指し、ファイルが別の場所で定義された名前を使用するには、その名前に対する宣言を含める必要があります.名前に関連付けるエンティティを定義します.
--extern:定義ではなく変数を宣言し、初期化を表示できません.表示初期化が含まれたら定義します.
--複数のファイルが同じ変数を使用している場合は、宣言と定義を分離する必要があります.定義は1つのファイルにのみ表示され、他のファイルはこの変数を使用して宣言する必要があります.定義を繰り返すことはできません.
--C++は静的タイプ言語で、コンパイルはタイプを調べ、タイプは参加できる演算がサポートされるかどうかを決定し、タイプがサポートされていない演算を実行するとエラーが発生して実行可能ファイルが生成できない.静的タイプチェックは複雑なプログラムで問題を発見するのに役立ちます.
(3)識別子:文字、数字、下線、大文字と小文字が敏感
ネーミング仕様には、実際の意味を表す、変数名の小文字の先頭、カスタムクラス名の大文字の先頭、複数の単語からなる明確な区別(student_loanまたはstudentLoan)があります.
(4)スコープ(scope):グローバルスコープ、ブロックスコープ
--かっこで区切る
--名前有効領域は宣言から始まり、文が存在する役割ドメインの末端--ネストされた役割ドメイン、内層、および外層を宣言します.内層の役割ドメインに外層の役割ドメインにアクセスする変数を表示する場合は、:.
3.複合タイプ:参照とポインタ.
この節は少しめまいがしますが、まあまあです.参照、ポインタ、ポインタの参照、参照のポインタ、ポインタのポインタ、参照の参照です...
(1)参照:オブジェクトの別名を&変数形式で定義し、参照を初期化する必要があります.例:
int val = 1024;
int &rval = val; //rval val   
rval = 2; // 2  rval     ,   val。
int li = rval; //    li = val, rval       li
int &rval2 = rval; //rval2   rval   val 
--参照の初期値は、参照の前のタイプと同じオブジェクトでなければなりません.
(2)ポインタ
--ポインタの初期化:
int val = 1024;
int *p = &val;
pにvalのアドレスを格納し、アドレス記号&でpに付与する.int*は、pがポインタ変数であり、intタイプ変数を指すことを示す.オブジェクトタイプの異なるポインタは、互いに値を割り当てることはできません.
--ポインタ値の4つの状態:オブジェクトを指す(オブジェクトを格納するアドレスを介して);隣接するオブジェクトの次の位置を指します.空のポインタ無効なポインタです.
--ポインタを使用してオブジェクトにアクセスします.
int val = 1024;
int *p = &val;
cout << *p;
*p = 0;
cout << val << *p;
*、参照を解除し、*p操作によってval操作に等価です.
--空のポインタ.nullptr.空のポインタを生成する方法:
int *p1 = nullptr;
int *p2 = 0;
//#include cstdlib 
int *p3 = NULL;
--すべてのポインタを初期化します.
(3)ポインタと参照
--参照自体はオブジェクトではありません.定義して初期化すると、他のオブジェクトにバインド解除できません.ポインタは、オブジェクトを指すアドレスを格納するため、ポインタに値を割り当てることは、新しいアドレスを配置し、新しいオブジェクトを指すことを実現することである.
--ポインタの判断操作:if(pi)、pi値が0、false、そうでなければtrue
--voidポインタは、指すオブジェクトのタイプがわかりませんので、任意のタイプを格納できますが、void*ポインタで指すオブジェクトを操作することはできません
(4)複合型の宣言
int *p1, p2; //p1   int   ,p2 int
int *p1, *p2;
int val = 1024;
int *pi = &val;
int **ppi = π //       
cout << **ppi << *pi << val;
//      ,         ,         
int * &r = pi; //r   pi   
r = &i;//  pi = &i
*r = 0; //  *pi = 0; i = 0;