- ベストアンサー
メモリとポインタ
sankaku197の回答
int a; int *a = new int; 単にこの二つを比較した場合、特にメモリの節約にはなりません。 むしろ*a自身とnewで確保した分でポインタの方が余計にメモリ食うと思います。 だけど例えば動的配列(STL)なんかはメモリの節約になります。 int a[256]; int *a; a[256]では必ず256個のintを用意するので使わない分は無駄にメモリを食っていることになりますね。 そこをまず*aにしておいて、使う時に必要な分だけメモリ確保していけば無駄が出ないという考えです。
関連するQ&A
- ポインタを使うことのメリットとは??
こんばんは、Cの初心者です宜しくお願いします。 Cでポインタの記述を良く見るのですが、色々と本とかサイトとかで調べましたが、ポインタを使うことのメリットとか、使う理由を書いてるものに巡り合いません。 一体何故ポインタというものがあるのでしょうか。 変数(アドレス)を参照する事で、メモリの節約とか動作が速くなるとか、そのようなものが主な理由でしょうか。 逆にポインタを使わないと書けないプログラムとかはあるのでしょうか。 関数は、ポインタを引き数として元から設計されているので仕方がないとしても、、、、、、 以上初心者としての非常に素朴な疑問です、宜しくお願いします。
- ベストアンサー
- C・C++・C#
- レーザーポインタ
単四電池1つで動く小型のレーザーポインタを探しています。 できれば同じ型で、いろんな色(赤と緑以外ってあるのか?)があり、複数人で色違いを持てるようなレーザーポインタを探してます。 そんなレーザーポインタをご存知の方がいらっしゃいましたら教えてください。
- 締切済み
- その他(インターネット・Webサービス)
- C++のシングルトンオブジェクトに対するポインタについて
C++のシングルトンオブジェクトに対するポインタについて 只今C++を勉強中(すいませんが初心者)です。 タイトルの通り、C++のシングルトンオブジェクトに対するポインタについて 調べているのですが、web、手持ちの書籍上(もちろん入門系です)では確認 できなかったので、ここで質問をさせていただいております。 シングルトンオブジェクトのアドレスを保持しているポインタを、マルチスレッド 環境で利用する場合ってどの様な動きになるのでしょうか? 例えば同時アクセスされた瞬間、オブジェクト(ポインタ)は共有されるのか、 それともキューが発生してしまうのか、が知りたいです。
- ベストアンサー
- C・C++・C#
- ポインタのポインタの必要性
書物によるとポインタのポインタの使用例として「ポインタの配列」はポインタを使ってアクセスすることができます。」[*]とありますが、どうしてポインタのポインタが必要なのかがいまいちピンと来ません。 どういう場合なのかを知りたく思っています。 [*]サンプルスクリプト ===================================================== char *mnthp[3] = {/* ポインタの配列の宣言 */ "January", "February", "March" }; char **p1;/* 「ポインタのポインタ」の宣言 */ int i, j; p1=mnthp;/* 「ポインタのポインタ」にポインタの配列 */ /* の先頭番地を設定 */ /***** 例1 *****/ for (i = 0; i < 3; i++) {/* 「ポインタのポインタ」の値を変えずに */ printf("%s\n", *(p1 + i));/* 相対的に文字列を出力 */ } ==> このようなことをしなくとも printf("%s", mnthp[i]); で値を参照出来ると思われる。 ===================================================== [*] http://www9.plala.or.jp/sgwr-t/c/sec10-4.html 宜しくお願い致します。
- 締切済み
- C・C++・C#
- スマートポインタの使い方
boost::shared_ptrについてなのですが vector<shared_ptr<CTest>> vec; 上記のベクタの要素を別のクラスからも参照しておきたい場合、 shared_ptr<CTest> p = vec[0]みたいにスマートポインタで持っておくか、 単にCTest* p = vec[0]._Ptrとしてポインタを持っておくのとどちらが良いのでしょうか?
- ベストアンサー
- C・C++・C#
- 参照型で受け取った引数をポインター型に渡す方法
参照型で受け取った引数をポインター型に渡す場合は、 どのようにすればよいのでしょうか? 私は参照型の理解がすっぽりぬけています。 参照型はC++で導入された方法で、何がメリットで何がデメリットでしょうか? void pointer_test(AA *b) { ... } void test(AA &a) { pointer_test( ??? ); }
- ベストアンサー
- C・C++・C#
- 【なぜポインタを使うのか】
私は、ポインタのメリット・デメリットを以下のように考えています。 ◆メリット メモリを多く確保しなければならないオブジェクトについて、コピー処理を行うことなく省メモリでインタフェースできる。 ◆デメリット ・関数内でしか使用しない非ポインタのローカル変数に比べ、 アクセス可能な場所が多くなってしまい、色んな箇所から値が変更されうる。(影響範囲の限定がしずらい) ・可読性が低くなる。(若いエンジニアはCの経験者は少なくっていくと思われるため、保守コストが若干割高になる) そのため、よっぽどメモリを多く使うようなオブジェクトでなければ、 (もしくは速度を重視する必要があるプログラムでなければ) 値渡しにしても良いのではと考えています。 しかし、度々目にするソースは、何でもかんでもポインタで処理しているものも多々見受けられます。 特に、int型のようなメモリを大量に使用しないものでも、ポインタで変数宣言しているケースもよく見ます。 なぜなのでしょうか? (熟練のC言語プログラマが、昔ながらの記述を踏襲しているというのはあるのかなと考えていますが)
- ベストアンサー
- C・C++・C#
- C言語のポインタの利点がわかりません
C言語を始めたばかりですが、 ポインタで間接参照するメリットが今一つわかりません。。。 特に、関数ポインタを使う場合には、 単なる関数ではだめなのでしょうか。 どなたか、かみ砕いて教えていただけないでしょうか。
- 締切済み
- C・C++・C#
お礼
ありがとうございます。 メモリの節約になる場合と、ならない場合の両方のご説明のおかげで、 とてもわかりやすかったです!