1 名前:デフォルトの名無しさん [2007/10/24(水) 04:07:56 ] なんと!意外にもスレが無かったので立ててみました 先日のソフトウェア開発技術者試験午後UのB木のポインタ表現 近年の基本情報技術者試験の午後C言語問題の自己参照構造体 など物凄く出来が悪いです。 ゆとり?文系?自作減少? ブラックボックス化されてメモリ管理やコンピュータの細かい知識が不要となった? 本当にポインターは必要なのか!?議論しましょう
654 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 02:48:13 ] 関数での受け渡し以外にポインタなんて使う?
655 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 03:51:26 ] mallocなどで確保するときに使うよ
656 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 09:50:06 ] 文字列だってポインタじゃん
657 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:39:02 ] >>654 自己参照型構造体使ってないのか?素人さん?
658 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 20:34:35 ] 玄人さんがお見えになったぞ!
659 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 20:48:28 ] ポインタ使うのに、玄人も素人もない
660 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 23:03:10 ] グローバル変数の初期化順序が保証されてないから、初期化順が重要な グローバルオブジェクトはポインタだけ定義しといて、初期化関数で順番に newしていくとか。 (順序が重要なオブジェクトをグローバルにすることの是非は置いといて)
661 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 01:03:25 ] >>654 オブジェクトいろいろ弄る時に使うよ。入れ替えたりとか便利。
662 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 01:33:28 ] コールバックするのにつかうー longjumpするのにも使う
663 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 01:43:57 ] もう「無いと困る」でいいんじゃね?
664 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 01:51:40 ] >>657 データ格納するならデータベース使わね? 組み込みなら、一時的な(親機に渡す日次処理で消えてしまうよな)データの格納に使ったりするけど 今は組み込みもDBの採用が進んでるし
665 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 01:55:29 ] それとこれとは話が違う・・・
666 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 02:02:54 ] 話が違うというか、本物が来ちゃったようだ・・・
667 名前:デフォルトの名無しさん [2007/12/19(水) 02:37:02 ] ポインタ使って2−3木を作りたいと思っているのですが ここを見ればおkていうサイトとかありませんか?
668 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 08:24:16 ] データ構造とアルゴリズムを扱った書籍を買った方がいいと思うね
669 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:32:47 ] てか作ればいいじゃん
670 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:48:42 ] 自己参照構造体というのを試してみたんだが、メモリの開放が面倒そうだ。 自分を指してる一つ前の構造体のアドレスってどうやって取得するの? 元々そういう風に構造体を作らなきゃダメ?↓みたいな感じで。 typedef struct tree { struct tree *prev; struct tree *next; int x; } tree_t;
671 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:51:29 ] 駄目
672 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:59:19 ] 自分は初期の頃はtree->next->nextでNULL見つけてtree->nextを解放したら, tree->nextをNULLにする.ポインタ最初に戻してまた上から見るみたいなことやってたw 双方向だとその辺ずいぶん速くなるよね.
673 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:32:57 ] >>672 再帰すればいいじゃん。
674 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:44:48 ] >>672 うん,いまは順方向だけの場合そうやってる. 順j方向リストの場合サーチかけてるポインタじゃなくて その次に対して操作すると一つ前のアドレスはサーチかけてる ポインタそのものになるということをいいたかった.
675 名前:デフォルトの名無しさん [2007/12/19(水) 12:56:15 ] >>668 >>669 わかりました、頑張ります!
676 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 13:35:02 ] おまいら、1方向の線形リストならもっとうまい手があるだろうが。 あるノードを消す場合は、その後ろのノードを消すノードに上書きして、 後ろのノードをfreeするんだよ。
677 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 17:35:31 ] 一方向の線形リストなら「上書き」って必要ないでしょ 消すノードの前のノードと後ろのノードを繋げてから 対象ノードをfreeすればいいんじゃないの
678 名前:676 mailto:sage [2007/12/19(水) 17:39:23 ] 1方向って*prevがないやつか ごめんなさい
679 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 17:39:55 ] おれ677だった ごめんねごめんねごめんね
680 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 17:56:32 ] >>679 許すからキニシナイ。 真面目な話、あるノードを消したければ後ろのノードの内容を上書きして後ろの方の ノードを消すなんてのは一方向線形リストを扱う時の基本的なアルゴリズムだよ。 先頭からまた検索するなんて、無駄無駄無駄〜! じゃ、あるノードの前に新しいノードを追加する時はどうすれば無駄がないか 考えてみそ。
681 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 19:19:59 ] ポイントを押さえて学ぶべき
682 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 19:57:24 ] 2次元配列を渡すときに大きさが分からなくて void hoge(int array[][SIZE])見たいな書き方ができないときは void hoge(int* array[])か void hoge(int** array)で書くしかない?
683 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 20:00:19 ] 動的確保してポインタへのポインタで渡す
684 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 20:19:36 ] 動的静的関係なくね?
685 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 20:22:04 ] 渡す側がサイズを知らないってどういうこと?
686 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 20:26:19 ] よくあること
687 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 20:30:01 ] >>682 また、ポインタと配列がゴチャゴチャになってしまって分からないヤツがきたな
688 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 20:30:38 ] 受け取る側が渡す側からサイズを教えてもらえないと、2次元として扱うのは無理なのだが
689 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 20:31:15 ] 番兵くんがいればそうとも限らない
690 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 20:40:50 ] もう、なんでもかんでもvoid*で渡して、 後は、渡されたほうの関数の中で好きにすれば、 なんでもOKだ
691 名前:682 mailto:sage [2007/12/19(水) 20:46:15 ] int sum(int** array,int i_size,int j_size){ int sum=0; for(int i=0;i<i_size;i++) for(int j=0;j<j_size;j++) sum+=array[i][j]; return sum; } a[3][4],b[10][20]が宣言されてたとして、 上の関数ならsum(a,3,4)もsum(b,10,20)も実行できるけど *じゃなくて[]を使おうとすると大きさ分からなくて困るじゃん… と書こうとしたんだが、静的配列じゃ動かないのなこれ。 いろいろ勘違いしてたすまん。
692 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 20:49:02 ] malloc()したときに確保した要素数わかってるんだから、 それを関数に渡せばいいだけだと思うが。 要素数を教えないで、どうやって終端を認識するの?
693 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 20:58:44 ] void hoge(int **ary, int m, int n) { /* ごにょごにょ */ } int main(void) { int **ary; int m, n, i; /* m, nに配列長を代入 */ ary = malloc(m * sizeof(int *)); for (i = 0; i < m; i++) ary[i] = malloc(n * sizeof(int)); return 0; } こういうことじゃないの?
694 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 22:23:32 ] 配列でもポインタが扱える では無く、むしろ 配列はポインタで処理される と考えるんだ
695 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 00:33:27 ] つか、STL使えよって話だよな
696 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 20:29:52 ] OTLもなかなかいいよ
697 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 20:36:39 ] ポインタの壁に挫折した人みたい
698 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 04:26:47 ] いろいろ書いて実行してみること。 アセンブラしてたからかな?すぐ理解できた。
699 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 09:21:28 ] 今からポインタ学ぼうって人が「じゃあアセンブラからやろう」って思う訳が無い
700 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 12:01:32 ] アドレス変換テーブルの話なんか聞かされて よけいわけわからなくなっちゃったような奴なら じゃあアセンブラからやろうと思うんじゃないか
701 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:13:17 ] やる気さえあればすぐ覚えられる 最長でも1日悩み抜けば覚えられるレベル 厄介なのは、すぐ意気消沈してしまう性格
702 名前:デフォルトの名無しさん [2007/12/22(土) 03:07:15 ] ** をポインタのポインタなどと訳する事で余計に初心者の理解を妨げてるように感じる。
703 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 03:11:39 ] じゃあなんて
704 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 03:29:18 ] ポインタ(変数|オブジェクト|インスタンス)へのポインタ
705 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 03:34:15 ] ようするにポインタへのポインタじゃないか
706 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 11:26:22 ] pointer to pointer 「の」は適切じゃないかもな
707 名前: mailto:sage [2007/12/22(土) 11:26:53 ] ポインタ変数を型とするポインタとか
708 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 11:35:30 ] >>707 わけわからん
709 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 12:45:55 ] toに引きずられてるアホども
710 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 13:05:50 ] ポインタとポインタでいいじゃん 2こ仲良くていいじゃん
711 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 13:36:43 ] int x = 1, *px, **ppx; px = &x; ppx = &px; printf("%d %d %d", x *px, **px);
712 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 13:54:03 ] >>711 いいたいことは判るが > printf("%d %d %d", x *px, **px); printf("%d %d %d", x, *px, **ppx);
713 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 14:32:04 ] 「ポインタのポインタ」と聞いて、その本質と真意を理解できないおまえらは、頭悪い。 100の言葉をもって、最初から最後まで全てを語りつくさないと理解できないのか?
714 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 15:04:33 ] 初心者にとっては解りにくいって話が、どうしてそうなる?
715 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 15:10:02 ] それは誤解 言葉がわかりにくいんじゃないんだよ
716 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 15:10:08 ] ポインタのポインタ の検索結果 約 4,450 件中 1 - 10 件目 (0.02 秒) www.google.co.jp/search?hl=ja&q=%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF ポインタへのポインタ の検索結果 約 2,600 件中 1 - 10 件目 (0.21 秒) www.google.co.jp/search?hl=ja&q=%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%B8%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF ダブルポインタ の検索結果 約 2,430 件中 1 - 10 件目 (0.21 秒) www.google.co.jp/search?hl=ja&q=%E3%83%80%E3%83%96%E3%83%AB%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF
717 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:15:03 ] char *cp; を「charのポインタ」って言うんだから、 void **pp; を「ポインタのポインタ」って言ってもいいじゃないか。
718 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:20:44 ] うん
719 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:23:48 ] 俺char *は「charへのポインタ」と言っているよ。
720 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:25:29 ] >>717 ポインタ=何かを指す=指向性のあるもの。よって、 char *cp は「char型へのポインタ」 void **pp は「void型へのポインタへのポインタ」
721 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:27:03 ] うん
722 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:28:10 ] >>720 それでもいいけどね、「へ」は無くてもいいんだよ。
723 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:35:02 ] >>720 型は指してないんじゃね?
724 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:43:12 ] 俺も意識して 「〜のポインタ」とか「関数ポインタ」とかじゃなくて 「〜へのポインタ」って言ってる
725 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:48:16 ] それでも通じるからいいんじゃね
726 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:48:18 ] 「へ」は重要だ。「へ」があることによって、何かを指してると認識できる。 「〜のポインタ」だけだと意味が通じない。 …ということを言いたかった。
727 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:48:59 ] いや「へ」はなくても通じるんだよ
728 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:53:22 ] そもそもポインタって何かを指すものじゃん
729 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 17:32:03 ] 初心者にとって、という話だろ?「へ」はあったほうがいいよ。 既に理解してる人にはどっちでもいい。
730 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 17:38:55 ] 初心者にとっても有っても無くても同じ。
731 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 17:56:14 ] じゃあvoid ***pppはなんていうの? char ****cpppはなんていうの?
732 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 19:01:12 ] そんなものは出てきてはいけないw
733 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 19:53:13 ] ___ ━┓ / ―\ ┏┛ /ノ (●)\ ・ . | (●) ⌒)\ . | (__ノ ̄ | \ / \ _ノ /´ `\ | | | | ___ ━┓ / ― \ ┏┛ / (●) \ヽ ・ / (⌒ (●) / /  ̄ヽ__) / . /´ ___/ | \ | |
734 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:38:12 ] 「への」に1票
735 名前:デフォルトの名無しさん [2007/12/22(土) 22:39:37 ] >>731 void ***pppやchar ****cpppなんて使う機会ない
736 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 02:26:02 ] へ へ の の も へ
737 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 04:23:45 ] >>731 初心者がそんなもの使うかアホ 極論に持って行こうとするなよボケ
738 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 13:59:37 ] ダブルポインタでええやん。
739 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 14:23:10 ] じゃあダブポで
740 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 14:23:33 ] ゾッ
741 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:33:11 ] **のまま使ってる時点でほとんどクソコードだろ。 ふつうtypedefにするかstructにいれる。
742 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 09:29:32 ] いやいや、ある構造体の領域をヒープから確保する関数の場合とか、 **を渡した方が自然な場合もある。
743 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 13:07:01 ] どうせならデュアルポインタのほうがかっこよくね?
744 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 14:07:43 ] クアッドポインタにオクタポインタっすね
745 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:19:37 ] ポンタでよくね?響きが萌える
746 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:22:22 ] ポイポインタ
747 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 20:46:28 ] つ[*&]
748 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 21:01:54 ] ポインヨ
749 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 22:06:00 ] >>745 あのjunkyのおっさんですか?
750 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:05:43 ] ツインポインタ
751 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:39:04 ] ポインポイン
752 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:40:28 ] ポインティングゥー!ポインタァー!!!
753 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 02:17:22 ] 日本語でいいだろ。「二次ポインタ 」
754 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 02:42:06 ] 「ポインタ」も日本語にしろ