C ++ポインタ参照の違いを示し

まず、理解ポインタの基礎、5つ星の重要な指標

変数からなる:変数のアドレス、変数名、変数の値は、

私は10を= int型
ここに画像を挿入説明

第二に、ポインター

2.1は何ですか

ポインタ間接により、この変数を変数のメモリのアドレスを格納するためのポインタ
例えば:INT * P; int型の変数に整数ポインタ変数p、ポイントを宣言

コード例
I点への実装ポインタ変数p

int i= 10;
int *p; //声明一个整型指针变量p
p=&i;//将i的地址赋给指针变量p

P =&Iは、&アドレス、変数iの撮影のアドレスとして採用

コードを示す
ポインタ変数自体は、変数の値が変数、そこ可変アドレス、変数名であるので、
ここに画像を挿入説明
図から分かるように、変数Iに格納されているポインタ変数p値

2.2ポインタ操作変数を使用する方法

iが変数iを変化させることにより可変、その変数* p値である変数の値を表す* Pの使用

特定のコード

int i= 10;
int *p; //声明一个整型指针变量p
p=&i;//将i的地址赋给指针变量p

*p=11;
cout << i << endl;//输出i=11

*サプリメントの使用

  • int型* P(*変数名型名):*はポインタ型を示し、
  • P *(*変数名):*間接演算子を示し、

2.3なぜポインタを使用

子供用の靴がありますが、頼むかもしれない変数名は私が直接、変数の値を変更することができ、そしてなぜそれをポインタ経由
実際には、変数の変数名の値を変更することで、だけでなく、訪問のアドレスの半ばまで

スタックの観点から以下の動作

例えば

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch;    /* 一个字符型的指针 */

ポインタ変数IP、DP、FP、一般的に4バイトのメモリ空間をCHであり、実際のデータ型のすべてのポインタ値は、長い進メモリアドレスを表しています。

スタックポインタに実行すると、大規模な伝送パラメータが費やした時間を節約することができたときに、それはより速くすることができ、スペースを節約し、スタック領域が非常に小さいことができ、スタックポインタに、実際のメモリは、変数の実行によって占められるよりも小さく、貴重な、大きなデータ圧縮に行くことは不可能です。

第三に、参照

3.1の参照は何ですか

変数参照は、エイリアス、変数の第二名のと等価です
操作の参照、それは操作変数に相当します

見積もりフォーム

  • &ブーツ基準にして定義:参照名&タイプ=変数名;

たとえば:LOL英雄連合は名前はありません
型参照名=&変数名を、
ゲーム・LOL =リーグ。

3.2簡単な例を引用

実証された:私は、別名IRはIRは、私の運転の操作に相当されています

#include<isotream.h>
void main()
{
	int i =9;
	int &ir =i;
	cout<<"i="<<i<<"  "<<"ir="<<ir<<endl;//i=9  ir=9
	
	ir=20;//改变ir的值
	cout<<"i="<<i<<"  "<<"ir="<<ir<<endl;//i=20  ir=20

    cout<<"i的地址是:"<<&i<<endl;//i的地址是:0x0012FF34
    cout<<"ir的地址是:"<<&ir<<endl;//ir的地址是:0x0012FF34
}

グラフィックコード
ここに画像を挿入説明
Irの操作は、iの操作に相当します

3.3基準点の使用に注意してください

  • (1)引用した参考文献を確立できません
  • (2)参照の配列を確立することができない、配列参照が確立できません
  • (3)ポインタ参照を確立することができる、確立できないへのポインタであります

コード説明

int i=0,a[10];
int &&ii=i;  //错误,ii是引用的引用
int &&aa=a;  //错误,aa是数组的引用
int &*ip=i;  //错误,ip是指向引用的指针

int *pi=&i;
int *&pr=pi; //正确,pr是指针的引用

第四に、ポインタと参照の違い

C ++ 4.1の参照を導入する理由

実際には、本質的には、それが引用されたポインタ不備を改善し、参照ポインタの制約を追加することです

4.2での不備ポインタ

  1. 操作ヌルポインタ:ポインタが0に割り当てられています
  2. 操作野生のポインタ:ポインタ初期化されていません
  3. 無意識のうちには、ポインタの値を変更し、その後、私は、通常のポインタを考えました

4.3参照ポインタ改善

  1. リファレンスは、(無野生ポインタことを確実にするために)初期化されなければなりません
  2. 初期化は、既存の変数のエイリアス(つまりNOT NULLポインタを確実にするため)
  3. いつも彼の初期化(変わらない保証ポインタ値)のオブジェクトを指すように参照します。

参考リンク

彼は198元の記事を発表 ウォン称賛94 ビュー90000 +

おすすめ

転載: blog.csdn.net/shang_0122/article/details/104755481