• ベストアンサー

ポインタでつまっています。

いま、ポインタを扱ったクラスの学習をしています。 ポインタの活用が不可欠な,アルゴリズムやデータ構造の勉強を並行して進めることを勧められました。 実際の利用法を知ることが理解の助けになるからとのことです。 そこでポインタとクラスを扱ったサンプルソースを書いていただけないでしょうか? コメントアウトによる解説があると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

http://okwave.jp/qa/q6892110.html こっちでも書いたけど、本を読みましょう。 ポインタに特化した本もあるから。 ここに一つ二つサンプル書いたところで、そのサンプルで使ったやりかたしか覚えられないでしょ? 本だったらいろんな使い方も載ってるし、なにより「基本」を詳しく説明しています。

rivalknockout
質問者

補足

本を買える環境とお金に恵まれているのですね。うらやましいです

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

> 本を買える環境とお金に恵まれているのですね。うらやましいです 私は超能力者では無いので、あなたの生活環境とか懐具合とかわかりませんから。 別に、解説サイトを探すなり、図書館で探すなりしても構いませんよ。 ただ、身銭切った方が真剣になれる、とか、手許に置いて気になったらすぐ見れるようにしておく、とか、気になるところとかにマーカーで書き込める、とか、他の人の評判を書評という形で見れる、とか、いろんな効果があるので、本を買うことを勧めたまでです。

rivalknockout
質問者

お礼

はい。 あ、とても親切な方からサンプルコードを頂けていまそれで大変助かってます。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

その、助言をくださった方にお願いしてみてはいかがでしょうか。 ここでゴチャゴチャ言われるよりは、そのほうがいいのではないかと思います。

rivalknockout
質問者

お礼

ゴチャゴチャ・・・

関連するQ&A

  • ポインタについての良いテキストを探しています。

    ポインタ完全制覇、秘伝問答ポインタ編は読了しました。 しかし、ダブルポインタ(便宜上こう書きますが、ポインタのポインタのことです)や トリプルポインタが出てくると、いきなり分からなくなってしまいます。 アドレスと値の関係を図解してみても、なぜこんな風にする必要があるのだろう?その必然性は? となってしまい、本質的な理解ができていないと感じています。 関数に渡すときの値渡しと参照渡しについては理解できているつもりです。 ですが、それに、構造体や、構造体のメンバーに文字列がある場合、mallocなどが関わってくると ゴチャゴチャになっていきなり分からなくなってしまいます。 上記の本は、文字列と配列とポインタあたりは解説してあり、そのあたりは理解しているつもりなのですが、ダブルポインタやトリプルポインタについては明確な記載がありません。 以前の質問で、 http://okwave.jp/qa/q6478987.html >3次元の構造を持つなら 3次元配列が必要であり, それを動的に確保しようとしたら「ポインタのポインタのポインタ」は自然な発想だと思う. とご回答を頂いたことがあるのですが、"自然に"だけでなくじっくり考えても理解できていません。 その他のご回答もなぜそのような状況でそのようなポインタの使い方が必要になるのかなど理解出来ないところが多いです。 基礎が大事だというのは十分理解しているつもりですが、 基礎だけでなく、その上のレベルでのポインタの解説や勉強に役立つテキストを教えてください。 なにとぞよろしくお願いいたします。 また、所要のため土日はネットに繋ぐことができませんのでお返事が遅れることをご了承ください。

  • トリプルポインタが必須!となる状況ってありますか?

    不具合が生じ、業務ソースのエラー処理の部分まで掘り進んで見ていたら、 トリプルポインタ(ポインタのポインタのポインタ)を使用している部分がありました。 外注で中国産のソースのようで、当人に聞くことはできず、 周りの知識人に聞いてみたのですが「それでうまく動いているんならいいんじゃないの?」と 素っ気ない対応でした。 トリプルポインタが必須となる状況はあるのでしょうか? 構造体がネストしていてそのメンバに文字列があって… となっている場合などでもダブルポインタ(ポインタのポインタ)で処理できるように思います。 そんなときにトリプルポインタを使うよっていう状況やサンプルがありましたら教えてください。 よろしくお願いいたします。 ちなみに、不具合は単純なものですぐに解決しました。

  • 就職試験で、データ構造とアルゴリズムに関する問題を面接時に実際に解いて

    就職試験で、データ構造とアルゴリズムに関する問題を面接時に実際に解いてもらうと言われています。 (私の現状) 問題は分かれば10分程度で解けると言われています。 また、topcoderの初級から中級がお勧めと言われているのですが、いかんせん英語なので問題を読むことから一苦労で対策がなかなかできていません。 一応、本でいろいろ調べたところ、ナップサック問題というものや、動的計画法などがアルゴリズムを学ぶ上で基礎であるということみたいですが、本の内容が中級程度の解説のようで理解するのが難しかったです。 私はこの手の理論は初級程度です。コーディングは得意なのですが理論が苦手です。 分かれば簡単で10分とはいえ、分からなければ(積み上げの基礎がないなど)きっと永久に解けないか、幸運にも発想が助けてくれるかのどちらかになると考えています。 (質問事項) ・アルゴリズム・データ構造について初心者がうまく学習できる書籍はないでしょうか(2~3週間程度で基礎ができるのが望ましいです)。 うまく初心者が学習できる方法はないでしょうか。 ・トップコーダーと同程度の問題を日本語で解けるようなサイトや本はないでしょうか。解説もあればなお嬉しいです。 どうか、皆様、教えて頂いた情報を最大限に活用させていただきますので、よろしくお願いいたします。

  • ポインタのアドレスの不変的な性質?

    最近奇妙な現象?に遭遇しました。 理解している人には笑われるかもしれませんが・・・・ ソースを以下に示します。 #include <stdio.h> void function(int *pointer); void main(){ int sample=3; int *pointer; pointer=&sample; function(pointer); printf("%d\n", *pointer); } void function(int *pointer){ int temp=9; pointer = &temp; } 今上のソースとは別のプログラムを作成中で、上のような状態になっています。関数にポインタのアドレスを渡し、関数の中でアドレスを書き換えて表示を違うものにしようと考えました。 上の表示結果は3になります。なぜなのでしょう? そして目的を達したいため、上のように関数内でのアドレスの書き換えが呼び出し側に反映されるようにすることができないでしょうか? 分かる方はよろしくお願いします。

  • データ構造とアルゴリズムの違いについて教えて頂けないでしょうか。

    データ構造とアルゴリズムの違いについて教えて頂けないでしょうか。 データ構造とアルゴリズムについて学習しています。 (質問事項) ・データ構造とアルゴリズムの違いについて教えて頂けないでしょうか。 詳細に教えて頂けると大変助かります。 (私の現状) たとえば、データ構造は、単純なものでは、配列やコレクション、2分木などの構造で、アルゴリズムは2分木探索の実装方法だと思っています。 データ構造とアルゴリズムについては初心者です。 (現在、就職活動中で、これらを学ぶ必要がありご質問させて頂いています) どうか、皆様、教えて頂いた情報を最大限に活用させていただきますので、(皆様にとってはくだらない質問かもしれませんが…)どうぞよろしくお願いいたします。

  • C言語ソースコードの解析

    私は現在組み込みのプロジェクトに参加おります、新米プログラマです。 既存の処理を理解したうえで設計しなければならないのですが、 元のソースコードに対して設計書が1つもなく、 ソース、ヘッダともにコメントなし、と言う状況です。 動作環境が無いので、ソースコードを解析して動作を理解しようとしています。 しかし、やっていることが複雑でなかなか進みません。 ■ポインタ/関数ポインタの嵐で、ポインタの実体を追っていくと、  30~40階層ほど上まで見なければならない。  (関数コールに、コールバックに、メッセージのやり取り)  関数ポインタを32bit整数の変数にキャストして代入し、  整数から関数ポインタに直したりしている。 ■構造体のメンバに他の構造体へのポインタがあり、  さらにその構造体は他の構造体のポインタを持っていて、  そのポインタが他の構造体の・・ などなど。 こういう複雑な他人のコードをどういう風に解析していますでしょうか? ご教授願います。

  • HOSTENT構造体を宣言する必要はないのですか?

    ネットワークプログラミングを勉強しているのですが,ソケットを用いた通信のサンプルで, HOSTENT *lphost として,HOSTENT構造体へのポインタを宣言して, lphost = gethostbyname(ホスト名の文字列); で,サーバーのアドレスをHOSTENT構造体にセットするとあります。 構造体へのポインタを宣言しても,構造体自体の領域は確保されないのではないかと思うのですが,gethostbyname関数が返すポインタは,いったい誰がどこに確保した領域を指しているのか,そしてその領域はいつまで保持されるのか,よく理解できません。構造体そのものを宣言せずに,それへのポインタを宣言し,それに関数の戻り値を代入するというのが,よく理解できないです。どなたか解説していただけると幸いです。

  • C言語 自己参照型 複数木構造

    C言語の自己参照型を使用しプログラムを作ろうとしていますが、 2分探索木についての解説、サンプルをのせているサイトは たくさんあり勉強になったのですが、 木が2以上の複数の場合になった場合、どういったプログラムをくめば いいのかわからず、学習したいと思っています。 参考となる、サイト、サンプルを教えていただけないでしょうか? //2分木の場合 struct node{ int nodeID; struct node *nextA; struct node *nextB; } //複数木の場合? struct node{ int nodeID; struct node **next; } のように複数木の場合は、次の木が複数に対応できるように ポインタのポインタを使用するのかと思いますが、 構造体のメンバでポインタのポインタの使用の仕方が いまいち理解できませんでした。 よろしくお願い致します。

  • ポインタの配列でエラーが出てしまいます。

    ポインタの配列でエラーが出てしまいます。 私は今PICというマイコン(ロボットコンテストなどで用いられるロボットの頭脳となるもの)のプログラミングをしています。ポインタの配列を使って液晶表示器に文字列を表示させるプログラムを作っているのですが、エラーが出てしまいます。 このようなプログラムです。 ・・・・ static const char *r_max[7] ={"err","750","7500","75k","750k","9.2M","20M"}; ・・・・・ Lcd_Custom_Out(1,1,err_ms[1]); ・・・・ ただし、Lcd_Custom_outはあらかじめ用意されている関数で、定義は次のようになっています。 void Lcd_Custom_Out(char row, char col, char *text); LCDとは2行16文字からなる液晶表示器で、rowで表示する行、colで左から何番目に表示するかを指定します。 そして、これが含まれたソースコードをコンパイルすると、Lcd_Custom_Outの行で、 illegal pointer conversion [?T53] to [text] というエラーが返されてしまいます。 [?T53]という部分が理解できないのですが・・・ 私はC言語はそこまで得意ではないので、何がいけないのか非常に困っています。 使用したコンパイラ「mikroC 8.2」で、ANSIに準拠しております。 大変困っております。どなたかご教授お願いいたします。

  • ポインタと構造体

    C言語初心者です。 下のコードはリスト構造のサンプルコードを元に自分で書き直そうとしているコードです。(なので、現時点では不完全なところ(例えばfreeしてないとか)があるのと、自分で理解出来ていない箇所があります。) 実行すると、8から3までの値が一応表示されるようになったですが、その過程の仕組みが自分でもよく理解出来ていません。 (1)tra *q = NULL; 通常、構造体のポインタを使用するときはq = &___のように他の構造体のアドレスを渡して使用出来るようにすると思いますが、ここではなぜ*qに、NULLを代入する必要があるのでしょうか。 (2)そのNULL状態のポインタqを関数printingdudeに突っ込んで結果的に8、7、6、、と出力されるまでの過程がよくわかりません。簡単に解説して頂けると助かります。(ちょっと雑な質問になってしまい申し訳ありません) typedef struct transcript{ int no; struct transcript *next; } tra; void printingdude(struct transcript *m); tra* noud(int v, tra* c); int main(){ tra *q = NULL; int i; for(i = 8; i>1; i--){ printingdude(q); q = noud(i, q); } return; } void printingdude(struct transcript *m){ if(m ==NULL) return; printf("%d\n", m->no); } tra* noud(int v, tra* c){ tra *a = (tra *) malloc(sizeof(tra)); a->no = v; a->next = c; return a; }

専門家に質問してみよう