何の障害理解のポインタ行うことができるものとし、これを克服す。[定休日]
質問
なぜポインタは世界有数の因子の混乱のために多くの新しいも古い大学レベルの留学生をCやC++?あのツールや思考プロセスしたい方のポインタの変数、関数、および超えてはどうすればいいですか?
いいところを紹介してください練習うことのできる人のレベルに、"ぁ、私は、"なしに拘泥し、全体のコンセプト?基本的にドリルのようなシナリオ.
解決
ポインタがコンセプトは多くの混乱で、特にその複製のポインタの値の周りでも参照が同じメモリブロックです。
がその場で発音を確認することが最善の類似についても選定するとともにポインタとしての紙のでアドレス、まとまったメモリブロックで参考にします。全てることができます簡単に説明しています。
また一部のデコードの下に一部のコメントが適しています。選んだデ私のその他の主なプログラミング言語、C#ないようにメモリリークを実装する予定です。
また、高レベルコンセプトのポインタがあり、それを無視するパーツのラベルを付け"メモリレイアウト"の説明をします。とを意図してい具体的にどのような何かメモリは次のようになります後もより低レベルです。しかし、正確に説明バッファにも、仕事とが重要であると考えていこれらの図等がある。
免責事項:すべての意図や目的、この説明の例メモリ レイアウトを大幅に簡略化します。あ架ありま 知る必要がある場合に必要な対応のメモリは、低レベルです。ただし、 意図を説明するメモリへのポインタが正確で十分です。
このようなTHouseクラス以下のようになります。
type
THouse = class
private
FName : array[0..9] of Char;
public
constructor Create(name: PChar);
end;
きの初期のハウスオブジェクトの名前のコンストラクタがコピーされ、民間分野FName.ありの理由として定義されている固定サイズの配列になります。
メモリーがありますあにまつわるオーバーヘッドの配置、私を示す以下のようになります:
---[ttttNNNNNNNNNN]--- ^ ^ | | | +- the FName array | +- overhead
の"tttt"エリアはオーバーヘッドが通常よりこのために様々な種類のランタイムおよび言語のように、8、12バイトまでとなります。こう価値が格納されことなく変更によるもの以外のメモリアロケータのコアシステムのルーチンは、リスク波のプログラム。
メモリを割り当て
取得す起業家を持っており、アドレスです。とは対照的に実際の世界では、メモリの割り当てできないということにな場所に配置すべきでスポットとスペースが狭いというプログレス-レポートのアドレスの割り当てます。
つまり、起業家についてはスポットです。
THouse.Create('My house');
メモリレイアウト:
---[ttttNNNNNNNNNN]--- 1234My house
おく変数のアドレス
書の住所に新しいハウス下の情報誌も発行されています。この論としての役割を果たすことを参考にします。この紙には、失われ、住みたい家が見つかませんが、既存します。
var
h: THouse;
begin
h := THouse.Create('My house');
...
メモリレイアウト:
h v ---[ttttNNNNNNNNNN]--- 1234My house
コピーのポインタ値
でのアドレスを新の情報誌も発行されています。このような二枚の紙をまと同一のハウスは別です。いずみアドレスから論文や並び替えの家具にこのハウスで見る その他のハウス の中で修正されている場合を除き、できる明示的に検出で実際に一つだけます。
注意 これは通常のことをコンセプトとして最も問題の説明人、二つのポインタは二つのオブジェクトのメモリブロックとなります。
var
h1, h2: THouse;
begin
h1 := THouse.Create('My house');
h2 := h1; // copies the address, not the house
...
h1 v ---[ttttNNNNNNNNNN]--- 1234My house ^ h2
メモリの解放
解体します。その後、論文のための新しいアドレスの場合、希望は明らかで忘れのアドレスのことなが存在します。
var
h: THouse;
begin
h := THouse.Create('My house');
...
h.Free;
h := nil;
ここで初めて構築のハウスは、入手し、そのアドレスです。そんなの家では、---コードは、左としての運動のリーダー)、その後は無料です。最後に私の住所から変更します。
メモリレイアウト:
h <--+ v +- before free ---[ttttNNNNNNNNNN]--- | 1234My house <--+ h (now points nowhere) <--+ +- after free ---------------------- | (note, memory might still xx34My house <--+ contain some data)
ぶポインタ
まだ起業家を破壊するのも忘れては消去のアドレスからの情報誌も発行されています。時以降にするのは、まることを忘れてはなり、訪問するので、失敗した結果も参照の一部につき無効な参照。
var
h: THouse;
begin
h := THouse.Create('My house');
...
h.Free;
... // forgot to clear h here
h.OpenFrontDoor; // will most likely fail
を使用 h
呼び出し後に .Free
が 仕事がは純粋なります。ができ、お客様の場所で、その中の重要な動作します。
h <--+ v +- before free ---[ttttNNNNNNNNNN]--- | 1234My house <--+ h <--+ v +- after free ---------------------- | xx34My house <--+
ご覧の通り、hがポイントの残りのメモリ上のデータが からない場合があったので、それをすると、その前が失敗する場合があります。
メモリリーク
本体を万が一紛失してしまっの手紙に見つけられません。の姿をどこかでも、ときにその後したい新しいハウスできませんの再利用がある場所です。
var
h: THouse;
begin
h := THouse.Create('My house');
h := THouse.Create('My house'); // uh-oh, what happened to our first house?
...
h.Free;
h := nil;
ここではoverwroteの内容 h
変数のアドレスの新しいハウスだが、古いものはまだたっ---どこかということです。このコードを制限することはないと思うが達成されるハウスです。つまり、割り当てられたメモリに滞在割り当てまでの申込終了時点をもって、経営システムに裂けるとスピードダウンします。
メモリレイアウト後の最初の配分:
h v ---[ttttNNNNNNNNNN]--- 1234My house
メモリレイアウトの後、第二に配分:
h v ---[ttttNNNNNNNNNN]---[ttttNNNNNNNNNN] 1234My house 5678My house
よりどうなるかという点に集中して取得しこの方法は、あくまでも忘れられる無料ものではなく、上書きでは前述のとおりといたしました。ントを、このが発生しますと、以下の方法:
procedure OpenTheFrontDoorOfANewHouse;
var
h: THouse;
begin
h := THouse.Create('My house');
h.OpenFrontDoor;
// uh-oh, no .Free here, where does the address go?
end;
このメソッドが実行され、まさに私たちの変数のアドレスハウスが存在するが、ハウスはまだまだ出てくると思います。
メモリレイアウト:
h <--+ v +- before losing pointer ---[ttttNNNNNNNNNN]--- | 1234My house <--+ h (now points nowhere) <--+ +- after losing pointer ---[ttttNNNNNNNNNN]--- | 1234My house <--+
ご覧の通り、旧データはそのまま残し、いません 再利用のメモリアロケータ.アロケータの把る 地域のメモリ使用されていません再利用していない限り、 無料です。
解放にはメモリを維持している(現在は無効)参照
解体、消去、江戸時代に入り線香が製造してい他の紙、古いアドレスで行く際は、住所ならではハウスで入手できるかもしれませんが、見るものに似ての遺跡です。
かもしれまでも見ハウスではitエンジニア向けシェアハウスはもともとはアドレス、その他の試みとして使用しても行えるようになりますが失敗する可能性があるという決.
時まで下がることもあるが、近隣住所"日本でしかできないビッグハウスの設定で位置する三つのアドレス(メイン通り1-3)、住所は中。いずみ取り扱いの一部の3-アドレスハウスなどの小さなシングルハウスもな決.
var
h1, h2: THouse;
begin
h1 := THouse.Create('My house');
h2 := h1; // copies the address, not the house
...
h1.Free;
h1 := nil;
h2.OpenFrontDoor; // uh-oh, what happened to our house?
こちらのハウスに取り壊されてしまいました、参考 h1
, が h1
クリアすることができましたけど h2
ものの、日付、アドレスです。アクセスへのハウスなくなった立がなされるものでありません。
この変化は、にぶポインタ。参照メモリレイアウト。
バッファオーバーラン
きりんのハウスありまわりにこぼれ広が近隣諸国家に対応いたします。れた場合は、近隣の家を後に帰宅していただろいろやっていたのを検討することになるだろう。
この理由を選んだのは固定サイズの配列になります。設定の段階と 第二ハウスを配置しますので、何らかの理由に配置する前 第一に。つまり、第二ハウスをして下 アドレスになります。また、彼ら割り当てすぐです。
このように、このコード:
var
h1, h2: THouse;
begin
h1 := THouse.Create('My house');
h2 := THouse.Create('My other house somewhere');
^-----------------------^
longer than 10 characters
0123456789 <-- 10 characters
メモリレイアウト後の最初の配分:
h1 v -----------------------[ttttNNNNNNNNNN] 5678My house
メモリレイアウトの後、第二に配分:
h2 h1 v v ---[ttttNNNNNNNNNN]----[ttttNNNNNNNNNN] 1234My other house somewhereouse ^---+--^ | +- overwritten
の部分をもっとも原因となクラッシュするときに上書き重要な部品 のデータを格納するかはランダムに変更します。のためのインスタンス ない場合があったので、それを問題になる部品の名前のh1ハウス、 のぶのプログラムが上書架の オブジェクトが衝突のときに利用するようにして、壊れたオブジェクト して上書きするリンクに保存して その他の物のオブジェクトです。
リンクリスト
ときにフォロードディスクドライブ、紙片を取得しますので、そのハウスがあり紙が新しい住所でのハウスはチェーンです。
var
h1, h2: THouse;
begin
h1 := THouse.Create('Home');
h2 := THouse.Create('Cabin');
h1.NextHouse := h2;
ここでは当ウェブサイトへのリンクを当社のホームハウス社のキャビン。したときのチェーンまで館 NextHouse
参考に、かつブログが数多くあります。訪問するすべての住宅のしるには、次のコードを使用します:
var
h1, h2: THouse;
h: THouse;
begin
h1 := THouse.Create('Home');
h2 := THouse.Create('Cabin');
h1.NextHouse := h2;
...
h := h1;
while h <> nil do
begin
h.LockAllDoors;
h.CloseAllWindows;
h := h.NextHouse;
end;
メモリレイアウト(追加NextHouseリンクとしてのオブジェクトの意を表明し のLLLL、下図):
h1 h2 v v ---[ttttNNNNNNNNNNLLLL]----[ttttNNNNNNNNNNLLLL] 1234Home + 5678Cabin + | ^ | +--------+ * (no link)
基本的には、何がメモリアドレス?
メモリされているものであり、基本的な条件だけます。たくさんの記憶 として大きなバイト配列の最初のバイトのアドレスは0、次のつの のアドレス1では上向きになるようにします。この単純化があります。
このメモリレイアウト:
h1 h2 v v ---[ttttNNNNNNNNNN]---[ttttNNNNNNNNNN] 1234My house 5678My house
がこれら二つのアドレスの左端のでアドレス0):
- h1=4
- h2=23
という当社のリンク一覧れactuallていれば次のようになるはずです:
h1 (=4) h2 (=28) v v ---[ttttNNNNNNNNNNLLLL]----[ttttNNNNNNNNNNLLLL] 1234Home 0028 5678Cabin 0000 | ^ | +--------+ * (no link)
を表しています店舗に住所のある"ポイントなどゼロアドレスです。
基本的に何を指すポインター?
ポインタは変数を持つメモリアドレスです。では、通常、プログラミングのお願い 言語およその数がプログラミング言語とランタイムを という事実を隠すい番号の下での数はできません 本当に保有を意味します。その思いのポインタとしてブラックボックスが打ち出されている。-まんまたは保護するようにしてください。実際に行ってい ます。
他のヒント
初めてのComp Sciクラス、まったのです。付与された講演のホールで約200名の学生がい---
教授に書き込みは: int john;
ジョンが立ち上がります
教授の書き込みます: int *sally = &john;
サリーは、ポイントジョン
教授: int *bill = sally;
法案は、ポイントジョン
教授: int sam;
Samが立ち上がります
教授: bill = &sam;
法案の現在ポイントサム.
と思いますか。思い過ごした時間では、こまで渡りの基本ポインタ。
例がその場で発音を確認することが役に立て説明するためのポインタがリンク.ほとんどの人が理解できるリンクのwebページのポイントを他のページのインターネットができるコピー&ペーストとハイパーリンクしていくものと同じオリジナルのwebページです。行けば、編集ページに従ってお進みくださいいずれかのリンク(ポインタを取得しまれる新しい更新されます。
その理由のポインタも混乱させ多くの人々は、その多くが少ない背景にはコンピュータ-アーキテクチャ.多くはいなかったのでしょうかアイデアをお持ちのコンピュータの機械が実際に実施-作業C/C++います。●
ドリルにおいて実施する簡単なbytecodeに基づく仮想マシン(任意の言語が選ばれました、pythonの作品であれば対象となります)指定討ポインタ操作(ロード-店舗直接的、間接的に対応).そしてついての簡単なプログラムに対する命令セットです。
何を必要と少以上のグループは、あなポイントとなるのではないでしょうか。
なぜポインタは世界有数の因子の混乱のために多くの新しいも古い大学レベルの学生は、C/C++養成講座を開催します。
のコンセプトプレースホルダーのための価値の変数にマップをもたちに教える学校-代数.がないということで、既存の並列を描くことができなどのメモリを物理的に敷設内にコンピュータと考えこのようなことがいえるでしょういう低いレベルのものだけでも、C/C++/通信バイトです。
あのツールや思考プロセスしたい方のポインタの変数、関数、および超えてはどうすればいいですか?
アドレスボックスです。たのを覚えていった学習プログラム基本的にマイクロコンピュータ、またこれらの写本のゲーム性が見られない場合また余価値観が特定のipアドレス彼の写真の束箱、段階的にラベル0,1,2...で説明できるだけ小さいもの(バイト)が合これらのボックスがたくさんのうち、一部のコンピュータをつくり出していますが、その65535!彼らには、やってはいますが、アドレスです。
いいところを紹介してください練習うことのできる人のレベルに、"ぁ、私は、"なしに拘泥し、全体のコンセプト?基本的にドリルのようなシナリオ.
ドリル?作struct:
struct {
char a;
char b;
char c;
char d;
} mystruct;
mystruct.a = 'r';
mystruct.b = 's';
mystruct.c = 't';
mystruct.d = 'u';
char* my_pointer;
my_pointer = &mystruct.b;
cout << 'Start: my_pointer = ' << *my_pointer << endl;
my_pointer++;
cout << 'After: my_pointer = ' << *my_pointer << endl;
my_pointer = &mystruct.a;
cout << 'Then: my_pointer = ' << *my_pointer << endl;
my_pointer = my_pointer + 3;
cout << 'End: my_pointer = ' << *my_pointer << endl;
一例として上記を除き、C:
// Same example as above, except in C:
struct {
char a;
char b;
char c;
char d;
} mystruct;
mystruct.a = 'r';
mystruct.b = 's';
mystruct.c = 't';
mystruct.d = 'u';
char* my_pointer;
my_pointer = &mystruct.b;
printf("Start: my_pointer = %c\n", *my_pointer);
my_pointer++;
printf("After: my_pointer = %c\n", *my_pointer);
my_pointer = &mystruct.a;
printf("Then: my_pointer = %c\n", *my_pointer);
my_pointer = my_pointer + 3;
printf("End: my_pointer = %c\n", *my_pointer);
出力:
Start: my_pointer = s
After: my_pointer = t
Then: my_pointer = r
End: my_pointer = u
かを説明するものの基礎を通してですか。
その理由のに苦労したことを覚えてい理解のポインタは、まず、多くの説明が多くり失望のお渡しについてます。すべてのことなので混同の問題です。ご利用の際はポインタのパラメータには、 まだ 通りすがりの価値その価値が住所ではなく、例えばint.
の人にリンクこのチュートリアルで出すことはできなかったが、その瞬間私を理解し始めたヒント:
チュートリアル上にポインタおよび配列の場合はC:第3章ポイント、文字列
int puts(const char *s);
の瞬間を無視する
const.
パラメータに渡されるputs()
はポインタ この値はポインタ(すべてのパラメータC抜いてしまうことが確認された値)の値はポインタのアドレスでポイント、または、単に、アドレスです。 そのことを書いていますputs(strA);
どちらしのアドレスのエキストラ[0]になります。
その瞬間を読んだこの言葉の雲上の別れのビームの光に包まれの私のポインタです。
できない場合はVB.NETやC#などの開発者(私)を使わない安全でないコードで解するというポインタ、またはいかなオブジェクト参照です。しいのが-間違っという概念を渡すと、オブジェクトへの参照方法コピーのオブジェクトです。
このTed Jensenのストリートビューポインタ配列のC"の優れた資源のための学びのポインタ.では10レッスンを始めとした説明のポインタ(うった)、仕上げ機能のポインタ. http://home.netcom.com/~tjensen/ptr/cpoint.htm
からあBeej-ガイドネットワークプログラミングを教えてUnixのソケットAPIは、これまでにない本当に楽しい。 http://beej.us/guide/bgnet/
複雑なポインタを超えて何ができるのか簡単に指導します。有する学生ポイント各用紙の館の住所も気持ちいいですし、目の前には学習ツールです。彼らしい仕事の紹介のが基本です。確かに、学習の基本的な概念であ 重要な た利用のポインタ.しかし、生産のコードで取得しているかもしれませんがより複雑なシナリオによりこれらの簡単なデモを内包す.
関わっていますがシステムのための構造を指その他の構造物を指その他の構造物です。これらの構造物も含まれる組み込み構造によりポインタの追加構造).ここでのポインタの取得も難しい決断です。また複数のレベルの間接指定は、開始また、コードのようになります:
widget->wazzle.fizzle = fazzle.foozle->wazzle;
で取得しくね(想像しく、潜在しています。投配列へのポインタは、ノードとノードのポインタ(樹木、リンクリスト)でが悪くなることがあります。いくつかの本当に良い開発者に迷って仕事を始めたようなシステムの開発者でも理解の基礎ん。
複雑な構造のポインタが表示貧しいコーディングのいずれかがいしております。構成する重要な作品の良いオブジェクト指向プログラミング言語原のポインタで、この多層間接指定.さらに、システムが必要となるケースが少なくあり利用のサードパーティ製ライブラリ構造のないカットするスタイルはます。そういうときは、複雑な自然がも確かにすべき戦いほどでいただけます。
と思うのレストランのお食事価格は大学での学びを支援すポインタでは使い勝手が良いと思い実演、プロジェクトを必要とするポインタを利用します。一難しいプロジェクトのためにポインタを理解しよ千人のデモンストレーションデモできるだ浅いの理解も深く把握のポインタは、本当に使用します。
ようと思って追加えるこの一覧表を見てもご説明のポインタ(バックの日)としてコンピュータ科学のチューター;初めましょう:
セットのステージ:
考えて駐車場の3空間、これらのスペース番号:
-------------------
| | | |
| 1 | 2 | 3 |
| | | |
このようなメモリ位置、列の連続する..うような配列になります。現在ありません車がないように空の配列(parking_lot[3] = {0}
).
データを追加します
駐車場にな滞在空の長...なかったことなのでしょう構築。うにしようとして当日の動きを多く埋め尽くされた3台、ブルーカー、赤いカー、グリーン車:
1 2 3
-------------------
| o=o | o=o | o=o |
| |B| | |R| | |G| |
| o-o | o-o | o-o |
これらの車はすべて同じタイプ(車)ですることができることは弊社の車が何らかのデータ(例えば、 int
でも異なる値blue
, red
, green
;これ色 enum
)
入力のポインタ
今までこの駐車場をお探って青い車をすばやく開発可能片方の指を使ってインスト青色の車にスポット1.このような取りのポインタに割り当メモリアドレスint *finger = parking_lot
)
指のポインタがないの答えです.見 時 指をかいだんがいの指が 指 (dereferencingのポインタまでの車(データ)がいっぱいになりました。
再配置により、ポインタ
できるようになっただく赤い車ではなく、できるリダイレクトを指にはめての新車です。いただいたポインタと同じ前)は私に新たなデータの駐車場スポットが赤い車で)同じタイプ(車)です。
のポインタな物理的に変更できるようになり ご 手指のデータでを見せてくれました。(駐車場スポット"アドレス)
ダブルポイント(またはポインタをポインタ)
この作品以上のポインタです。また相場でのポインタが指赤い車ご利用できますがその点を指で最初に所を指差し確認していました。(日本ではめったに見られない int **finger_two = &finger
)
今ならもっと知りたいの青色の車ができるのでは初の指の方向を目指し、車(データ).
のぶポインタ
今かいい感じのようにュしたいと考えていましたの手を保持するのを指すの車を無期限に設定されています。だが赤い車を駆動できます。
1 2 3
-------------------
| o=o | | o=o |
| |B| | | |G| |
| o-o | | o-o |
おのポインタが指すの赤い車 た があります。たとえば、新車を引くにござい---aオレンジの車です。現場していただきたいと思い、"あの赤い車"だを指すが、今はまだ間違っています。なかなかできない赤い車、オープンする。
ポインタを演算
Ok、まだィ第二駐車場(現在の占有により、オレンジ車)
1 2 3
-------------------
| o=o | o=o | o=o |
| |B| | |O| | |G| |
| o-o | o-o | o-o |
大学などが関わっていて、新たに質問していま---について教えてください色の車は、 次へ 駐車場スポットです。きまし指のスポット2ので、あなただけの追加1だけを指すのスポットです。(finger+1
今年るものを聞いてみたいと思いましたが、チェックとスポットまたは指して畏敬の念のポインタ*(finger+1)
このエリアまでも近く車の存在のデータをその位)
とは思わないポインタをコンセプトとして、特にトリッキーをほかの学生のメンタルモデル図のようなことにあるアットホームなスケッチボックスできます。
の難しさは、少なくともこれまで経験した過去に見るその他の対応、その管理のポインタはC/C++できunncessarily複雑に入り組
例のチュートリアルの良いセットの図面を大きく理解のポインタ.
ジョエルSpolskyするいくつかの良いポイントを理解し彼のポインタ ゲリラのご案内面接 記事:
そのほとんどの人は見れない部分をつかさどる脳の理解のポインタ.これは適性のあるものではなく、技術も必要で複雑なフォルム二重indirected考える人もいるはず。
になっていると思いまのバリアへの理解のポインタが悪い先生です。
ウズベキスタンのほとんどの人が教えあ約のポインタ:その もの以上のメモリのアドレス, やることもできるポイント 任意の場所.
もちろんその理解することは困難で、危険物半っていました。
なのである。ポインタを実際にシンプルなものにな概念 どんなにこだわりのC++言語について な廻している属性に"通常の"出作業は、しかしなが保証する言語でなく、実際のコンセプトにポインタです。
また環境についての説明この数ヶ月前 このブログ --今では頑人がいる。
(注、誰もがpedanticってるってあり、C++の規格はというポインタ 代表 メモリースしています。もっと言うわけではありません。る"ポインタは、メモリアドレスに置いて行かれないように、メモリのアドレスがある場合を考えのも呼ばメモリのアドレス".の区別が重要である)
の問題点のポインタは、コンセプトです。この実行および言語。追加の混乱の結果が教師としのポインタが難しいではなく、言葉の肥大化しゃCとC++に対応できる、コンセプトです。で膨大な努力がpooredへの説明のように受け答えはその問題について)のほうが場所取りすぎでいつで無駄なりたかったんでいてのすべてを理解すること。かを説明するには、問題です。
を知ることができるための思想というから、私は人にポインタを完璧にでも使いやしへと違う翻訳があるはアセンブラ言語です。ではアセンブラ言語で参照することはありませんとポインタ.もと呼ばれています。でプログラミング用のポインタはC、たくさんの失敗、本当にかなりの混乱をきたしている。まだまだいない別のものです。それでは、まずスマイレージさん一例です。
時api"と言ってい
int doIt(char *buffer )
//*buffer is a pointer to the buffer
どのような欲しがっているのか?
えい:
数を表すアドレスにバッファー
(ことができない doIt(mybuffer)
, や doIt(*myBuffer)
?)
複数のアドレスのアドレスでバッファー
( doIt(&mybuffer)
または doIt(mybuffer)
または doIt(*mybuffer)
?)
複数のアドレスのアドレスのアドレスにバッファ
(それ doIt(&mybuffer)
.ているのか、あるいは doIt(&&mybuffer)
?も doIt(&&&mybuffer)
)
その言語に関与しないようにして明らかでは、言葉"ポインタ"と"参照"がわからないなどの意味の明確性などといったものが"xを保持するアドレスy"、"この機能はアドレスy"その答えたように一体"mybuffer"が始まり、doIt者が大きく関係している。の言語をサポートしていないの営巣が発生した。ときのようにしていま手元に"ポインタ"に関する新しいバッファも変数を変更する機能を提供するポインタをポイントの新しい位置のバッファです。なんといったポインタ、またはポインタをポインタで、知って以下を参照してください内容を変更しのポインタです。ほとんどの時間しかないのではないかと思うが意味することにより"ポインタ"とほとんどの時間を私の間違いを問わずかに得た経験を自分の物にしたいで推.
"ポインタ"はあまりにもかわいそうだと思う過負荷状態で運転されています。はポインタのアドレスです。それとも変数を保持するアドレスを指定します。が機能したいポインタなたの住所にポインタ変数、といったアドレスへのポインタ変数?私はかなりの混乱をきたしている。
ていく、ということだと考えていくポインタのトリッキーを学ぶことでポインタの使い心地で、"このメモリ位置のセットビットを表すint、ダブル、キャラクターも".
ときに初のポインタではなく、どんどでメモリの場所です。"どういうことなんで開催される 住所?"
賛成しかねることを"きちん".
れるようになると理解し始めるときの発見の実を使用しないような過大型構造物へ。
その理由に理解できないので難しい概念では の書式が不.
int *mypointer;
まずはこの左端の部分の変数の作成を定義する型の変数です。ポインタの宣言はこのように、CとC++.代わりにその変数が差しのすべてにおいて理由があります。この場合: *
mypointer が差し 上int.
僕の実態を把握すポインタまた利用してC#(安全でない)、それらの作品で一が論理的に一貫した構文です。のポインタ型です。こちらの mypointer は ポインタをint.
int* mypointer;
なくした機能のポインタ...
私は仕事のヒントに際しか覚えていませんでしたC++.そういうのを知っていたい場合には、何をしないから試し/エラーになります。そのことか完全に理解することは、組み立てます。だいくつかの深刻な指導レベルのデバッグ、アセンブリ言語プログラムまで、対応することができるでしょうかを作ることができました。
いのえんだりしていたのことを考えながらアドレスにメールボックスそのものです。このように可視化できますのdereferencingのポインタのメールボックス).
例えば下記のリンクリスト:1)で始まりの論文のアドレス 2)のアドレスの論文 3)お使いになられているメールボックスを見たコミュニティが崩れつつある、論文には次の住所ま
リニアなリンクリストの最後のメールボックスのものがありませんので(終了します。円形リンクリストの最後のメールボックスのアドレスのメールボックスです。
ご注意ステップ3では、逆参照を生じることができますクラッシュまたは誤った場合、アドレスが無効になります。ときのメールボックスの無効なアドレス、想像されるため、このブラックホールもあるが、世界中:)
その主な理由は、人にとっては困りではたった一般的な教えに従う。んを講師に10のボランティアの人られた1メートル定規、それぞれていないスタンド周辺にある設定を使用しの支配者の視点です。次に示すポインタを演算による移動の周りの人(がい点はその支配者).いいな(上記憶に残方を示す概念なりすぎないように泥沼化に対応している。
ロサンゼルス生まれるので、CとC++によるようで苦しくな。さんがあなたを理論がないことを正しく把握を実践したのでポインタ操作は本質的に困難になれます。どうかよろしくお願いします自分の遷移するもん 知っていた ポインタにはパスカルに移動したCさん完全に失われています。
なかったと思うポイント自体が混乱している。ほとんどの人が理解できる、コンセプトです。現在どのように多くのポインタで考えるとはどのレベルの間接指定してます。なかでも多くの人が入れるのです。この変更ができ偶然な事故によるバグのプログラムの中でもしているので、難しいのデバッグのいざという時にコードです。
と思うのですが実際に構文の問題です。C/C++構文のためのポインターらしい内容的にも一貫性に欠け、より複雑できます。
皮肉なことに、もうするのかがよくわかしたポインタに遭遇をコンセプトに反復子は、c++ 標準テンプレート図書館.この皮肉ることができるからだと反復子は、たとして構想された一般化のポインタです。
あいの森までの学習を無視す。
の混乱からの複数の抽象化層を混ぜたものを"ポインタ"がコンセプト。プログラマーな混乱により経常に参考にJava/Pythonでのポインタが異なるような特性の基になるメモリです。
では原則として綺麗に別のレイヤーの抽象化は、ポインタはいたしません。
のんの説明でしたの配列で、指数の人々がどのようなポイントも一般的にどの指標です。
いうことを想像RAM配列である(すみが10バイトのRAM):
unsigned char RAM[10] = { 10, 14, 4, 3, 2, 1, 20, 19, 50, 9 };
その変数へのポインタは、指数(最初のバイト)の変動の違います。
その場所にポインタ/index unsigned char index = 2
, その価値が明らかに第三要素の番号4)ポインタをポインタはまる番号として使用し、インバース-インデックス自体のように RAM[RAM[index]]
.
私の描画配列のリストに基づいて紙でで示すような多くのポインタを指すと同一のメモリのポインタの算数ポインタをポインタです。
郵便ボックス番号です。
この作品の情報を利用いただくことができ、地下鉄からも近くて便利。
(とう場合演算に郵便ボックス番号、ある問題で、文字は違います。と自分がその気にさえなれば動きが他の国とのない転送先アドレス--そんぶポインタです。一方で--の場合は郵送、メール、そしてポインタをポインタです。)
悪い方を把握し、反復子は、..さま、ありがとうございましたみんAlexandrescu開始について不服を申し立てました。
多くのex-C++♪(トなので理解されて反復子が現代のポインタの前にダンピング言語)にジャンプのC#でもいいと反復子.
Hmmの問題は、すべての反復子は完全にオッズなどを実行時のプラットフォーム(Java/CLR)を達成しようと:新しい、みんなは-a-devます。ですが、いま一度、紫されたものの、以前にC:
間接指定.
非常に強力な概念がないだけでは..反復子として有用なものと抽象化のアルゴリズムの別の例です。およびコンパイル時間のアルゴリズムを非常に簡単です。ご存知のコード+データ、またはその他の言語(C#:
IEnumerable+LINQ+巨大な枠組み=300MB実行時の罰則の間接指定の乗り、アプリ経由玄妙観、蘇州刺繍のインスタンスの参照型..
"ルポインタが安いです。"
一部の回答についての主張される"ポインタのない"がないアドレスを直接る"ポインタは難しい!!"が出ているのです。一年前まtutored初年度のCS学生の道を歩み始めて明確に吸いなど至れり尽くせりで明確に分かれているもの 考え のポインタではない。うのが理解 なぜなのか、というポインタ.
しないほうがいいと思いままで離婚する問題-なぜ、どのような場合にポインタから説明するより幅広いソフトウェア工学の課題です。毎年変数 ない グローバル変数、なぜ必要因については、同様のコード機能は、この利用 ポインタ 専門彼らの行動は彼らの前に立ちはだかる。
と思いますか何かはわかりにくいのでつのポインタ.そのポイントの位置をメモリに受け付けたいと思います。店舗のメモリアドレスです。C/C++を指定できるタイプのポインタをポイントです。例えば:
int* my_int_pointer;
というmy_int_pointerに住所のある場所に格納するint.
の問題点のポインタはこの点の位置をメモリーしているところがあるのでトレイルオフが置いてはいけません。証明として、数多くのセキュリティホールC/C++からバッファオーバーフロー(incrementingのポインタを過去に割り当てられた境界).
だけを混乱させるものか、とい作品を取り扱っており替わりのポインタ.ハンドポインタをポインタなので移動も記憶にdefragmentのヒント.の場合はポインタの変化の中、その結果を予測不可能なので、まず施錠してお取り扱いのようです。
http://arjay.bc.ca/Modula-2/Text/Ch15/Ch15.8.html#15.8.5 つまり矛盾なりました。:-)
C/C++の初心者にも同じ問題、この問題が発生しないので"ポインタを学ぶ"もの"を誰がどのようについて解説し".一部の学習者が集まるで口頭の一部を視覚的に最良の方法の説明を使用するためには、 "電車"の例 (服のための言語的視します。
場所 "機関車" はポインタを できません 開催も "ワゴン" はなんと"機関車"をプ(点)。後で分類することができる"ワゴン"もできるかといった論点がある動物、植物体や人(アクセスします。