変数+複合タイプ
1.変数
1.初期値
オブジェクト:特定のデータ型のメモリ空間
すべての組み込み型変数を初期化することをお勧めします
1.1初期化と割り当ての違い
初期化と割り当ては完全に異なる操作です
初期化:変数を作成するときに、初期値を指定します
割り当て:オブジェクトの現在の値を消去し、新しい値に置き換えます
1.2「ビッグ4」の家を初期化する
int a = 0;
int a(0);
//列表初始化
int a = {
0};
int a{
0};
C ++ 11の新しい標準:中括弧{}を使用した初期値(リストの初期化とも呼ばれます)の変数が完全に使用されます
1.3初期化に関する注意事項
そこ場合の変数と組み込み型(ダブルintなどは、)、そこにある情報を失うリスクは、我々はリストの初期化を使用する場合、コンパイラが自動的にエラーを報告します。
例えば:
long double pi = 3.142312471849;
int a = {
pi} , b{
pi}; //报错
int m = pi, n(pi); //正确
int型とlongdouble型は情報を失うため、Abはエラーを報告します。
2.最初の知人-キーワードextern
2.1宣言と定義の違い
スペースの確立の宣言は「定義」と
呼ばれ、ストレージスペースの確立を必要としない宣言は「宣言」と呼ばれます。
[定義]ストレージスペースを確立する必要がある(int i)
【ステートメント】ストレージスペースを設定する必要はありません(extern int i)
ブック定義:
定義は、明示的な初期化(一目でわかる初期化)を含む宣言です。
宣言に初期化子がある場合、externが前に追加されていても、それは定義と見なされます
extern int i; //声明未定义
int j; //声明且定义
extern int k = 1; //定义(不再是声明)
如果声明有初始化式,就被当作定义,即使前面加了extern
以下に再現されているのは、他の2人の同僚による宣言と定義の理解です。
【注意】
変数は1回しか定義できませんが、複数回宣言できます
3.識別子
3.1定義
識別子は文字、数字、およびアンダースコアで構成され、文字またはアンダースコアで始まる必要があります
大文字と小文字を区別します。
例:
int some;
int Some;
init SOME;
3.2カスタムクラス名
カスタムクラス名は大文字で始まります
例:Sales_item
複数の単語を明確に区別する必要があります
3.3 c ++キーワード
3.4範囲
3.4.1定義
メイン:ブロックスコープ
メイン外:グローバルスコープ
オブジェクトを初めて使用するときは、オブジェクトを再定義してください
3.4.2スコープ演算子(::)
スコープ演算子が空の時間を残した場合、つまりグローバルスコープへの要求の場合、スコープ演算子は変数に対応する権利を取得します
#include<iostream>
int a = 40;
int main( )
{
int a = 0;
std::cout << :: a << std::endl; //输出40
std::cout << a << std::endl; //输出0
return 0;
}
2.化合物タイプ
宣言ステートメントは、基本的なデータ型とそれに続く宣言子のリストで構成されます
1.見積もり
1.1参照定義
オブジェクトに別の名前を付けました
int ival = 1024;
int &refval = ival; //refval指向ival(是ival的 另一个名字)
int &refval; // 报错!引用必须初始化
参照を初期化する必要があります
【理由】参照を別のオブジェクトに再バインドすることはできません
1.2一般的な初期化と参照の初期化
一般的な初期化:初期値は新しく作成されたオブジェクトにコピーされます
参照の初期化:参照と初期値は直接バインドされます
1.3引用
参照に値を割り当てることは、実際には、参照によってバインドされたオブジェクトに値を割り当てることです。
引用符で囲まれた識別子は&で始まる必要があります
参照はオブジェクトにのみバインドでき、リテラルまたは一緒にバインドされた式の結果はバインドできません
参照はまたなければならない同じタイプの参照の
int &a = 10; //错误: 不能与计算结果绑定
int a1 = 10;
double &b = a1; //类型不对, 必须是double型
2.ポインタ
2.1基本的な定義
ポインタ型を定義する方法:宣言子を* d [dは変数名]の形式で記述します。
ポインタはオブジェクトのアドレスを格納します。アドレスを取得する場合は、「アドレス演算子」演算子を使用する必要があります&
int ival = 42;
int *p = &ival; //将ival的地址存放在p中
【注意】ポインティングの種類は同じである必要があります
2.2ポインタ値
ポインタの値は、次の4つの状態に属している必要があります。
1.オブジェクトをポイントします
2.次のオブジェクトが占めるスペース内の次の位置をポイントします
3.ヌルポインター
4.無効なポインター
2.3ヌルポインタ
int *p1 = nullptr; //最好的使用
int *p2 = 0;
int *p3 = NULL; //预处理变量(必须使用: cstdlib 头文件)
前処理はstd名前空間に属していません
最初に、ポインタを0またはnullptrに初期化する必要があります
3. void *-特別なポインタ
void *は、任意のオブジェクトのアドレスを格納するために使用される特別なポインタ型です。
- 他のポインタと比較してください
- アクション機能の入出力
- 別のvoid *ポインタに割り当てる
しかし、void *はオブジェクトを直接指すことはできません
[理由]このオブジェクトのタイプがわかりません
4.演算子の使用*
int *p1, p2;//p1是指针,p2是int型
int* p1, p2;//p1是指针(合法但是容易误解),p2是int型
int *p1, *p2;//p1,p2都是指针
int * p1、p2;
p1はポインタ(合法ですが誤解されやすい)、p2はint型です