- ベストアンサー
ポインタって?
プログラムで出てくるポインタって、何が便利なんですか? ポインタを使うと良くなる点を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
一言で言うと、”メモリの使用量の節約とプログラムの高速化”。 ポインタの習い始めのうちは、こう理解しておけばいいんじゃないかな。
その他の回答 (5)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
実体がポインタである(たとえば、配列名を使う場合や、関数呼び出し)というケースを除けば、目に見える形のポインタは、なくてもそんなに困ることはありません。 とりあえず、困るようなケースは 1)C言語の標準関数や、Cで作られた資産を利用して、「文字列」を扱う場合 C言語の文字列は、char 型へのポインタとして定義されている(文字列というものは存在しない)ので、ポインタの概念は必要です。 これは、C++の範囲で、std::string を使えば、かなりのところまでポインタ無しでなんとかなります。 2)動的なデータを扱う場合 データの数があらかじめ決まっている場合は、配列が使えますが、そうでない場合、データの量に応じてデータ領域を「確保」する必要があります。 この新たに確保した領域は、ポインタ経由で扱うことになるので、この場合ポインタが必要です。 これも、C++の範囲で、STL と呼ばれる、コンテナを使えば、かなりのところまでポインタ無しでなんとかなります。 3)関数の引数を関数内部で変化させる場合 C言語では引数は、値によるコピーで渡されます。 従って、 void(int n){ n++; } のような関数では、呼び出し側では、変化した後の n を取得できません。 この場合、ポインタ経由で引数を渡すことになります。 (ポインタ自体は、コピーされるだけだが、そのポインタを経由して、データの実体を操作するため) これも、C++の、「参照型」を使えば、見かけ上ポインタ無しですますことができます。 4)関数を引数/変数として扱う場合 この場合も、「関数ポインタ」が必要になります。 いろいろな処理を切り替えて使うには便利です。 こんなところでしょうか。
- transam7000
- ベストアンサー率38% (56/147)
直接アドレスを参照することによって処理を高速化ができる。
- hogejo
- ベストアンサー率42% (11/26)
・他の方も仰ってましたが、配列へのアクセスにはポインタを使います。 ・例えば、文字列や構造体を編集する関数などを作る場合に必要になるでしょう。 関数に渡せる値、関数が返せる値はポインタかint/long/double/float/charだけです(何か抜けてるかも)。つまり、文字列(というかcharの配列)や構造体そのものを渡したり、受け取ったりはできません。char配列へのポインタや構造体へのポインタを関数に渡すことによって、操作したいデータを関数に伝えなければなりません。 ・ヒープ領域に確保したメモリに保存されているデータを指すのに使います。(関数内で宣言した変数のデータは関数の終了後にメモリから消えてしまいます。プログラム内で動的にサイズが変わるデータを扱う場合は、ヒープ領域にデータを保存しますが、そのデータにアクセスするためにポインタを使います。) 他の言語、例えばjavaにもポインタはあります。 ただ、C言語はポインタ演算が出来たり、ポインタを色んな型のポインタにキャストできてしまうので、ちょっととっつきにくい所があるかもしれません。(この辺が便利な所だと思いますが)
- mtfoggy
- ベストアンサー率14% (37/255)
>何が便利なんですか? 配列を使った事ないのですか?
- jacta
- ベストアンサー率26% (845/3158)
C/C++では、ポインタなしでは有益なプログラムはまず書けません。 というわけで、 > ポインタを使うと良くなる点を教えてください。 に対する回答は、「有益なプログラムが書けるようになる」です。 ポインタなしで書けるプログラムは、(サンプルとして示すような)簡単なコード片ぐらいです。 ちなみに、C/C++では、ポインタがなければ関数を呼び出すことすらできません。なぜなら、関数呼び出し演算子である()は、オペランドとして関数へのポインタを要求するからです。