1 名前:デフォルトの名無しさん [2007/10/24(水) 04:07:56 ] なんと!意外にもスレが無かったので立ててみました 先日のソフトウェア開発技術者試験午後UのB木のポインタ表現 近年の基本情報技術者試験の午後C言語問題の自己参照構造体 など物凄く出来が悪いです。 ゆとり?文系?自作減少? ブラックボックス化されてメモリ管理やコンピュータの細かい知識が不要となった? 本当にポインターは必要なのか!?議論しましょう
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 ] 「ポインタ」も日本語にしろ
755 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 02:46:15 ] 刺す人
756 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 02:46:48 ] そういわれればポインタの日本語訳って見かけないね イテレータは反復子と訳されるのに
757 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 02:55:56 ] じゃ、「二次指示子」
758 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 19:59:17 ] ポインタの和訳は…そうだな…「オブジェクトリファレンス」ってのはどうだい?
759 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 03:35:43 ] 参照じゃねーかw
760 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 05:40:44 ] その前に突っ込むところがあるだろw
761 名前:デフォルトの名無しさん [2007/12/27(木) 07:59:20 ] ポインタはウルトラマンセブンに出てくる乗り物だよ
762 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 13:16:11 ] ウルトラマンのやつは「ポ↓イ↑ン↑タ↓ー↓」 コンピュータ用語のほうは「ポ↑イ↑ン↓タ↓ー↓」
763 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 14:43:31 ] 違うだろ。
764 名前:デフォルトの名無しさん [2007/12/27(木) 16:35:25 ] 和訳なら矢印だな
765 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 18:19:45 ] int *ip int* ip ptr<int> ip 1番目より2番目の方が、2番目より3番目の方がわかりやすいと思うんだけどどうよ。
766 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 18:26:25 ] どうといわれても
767 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 18:42:59 ] ポインタ宣言子と間接参照演算子が別の記号だったら混乱起こさなかったのに。
768 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 19:10:47 ] C++のスマートポインタはその点で気が利いてる。 Cだと表現しようがないんだけど。
769 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 19:54:56 ] いまさら宣言の記法に注文つけてどうなる。
770 名前:デフォルトの名無しさん [2007/12/27(木) 20:27:21 ] 宣言の記法に注文付けたい奴は typedef int* intptr; とでもしやがれってんだ。 こんな事してるソース見たことはないが でもwin32apiのソース読むと typedefしまくりで、あんぐりする。
771 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:54:56 ] int* p, q;
772 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 21:47:44 ] int q, *p; これと>>771 が等価ってのはひどい。
773 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 21:47:47 ] >ポインタのポインタ ハンドル…。
774 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 06:51:30 ] >>773 昔のMac以外にそういう呼び方をする流儀ってあるのか
775 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 07:22:09 ] >>774 別に流儀じゃなくて、一つのメモリ管理モデルとしてあるわけで。 (MacOSに影響受けているから当然と言えば当然だけど)PalmOSでもハンドルで管理していたし。
776 名前:デフォルトの名無しさん [2007/12/29(土) 12:23:49 ] string使えはええやん。
777 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:04:32 ] は?
778 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 16:26:01 ] CPUエミュレータ作るとき、関数ポインタの配列を使いまくった。
779 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 06:19:59 ] クラスのメンバ関数の宣言にvirtualを使用すると関数ポインタになる件に関して クラスの変数の初期化が面倒だからmemset(this,NULL,sizeof(*this))でうっかりvirtualを含むクラスを初期化してしまうと実行時エラーにw
780 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:19:27 ] あたりまえやん
781 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 01:12:26 ] >クラスの変数の初期化が面倒だから そういう用途にはmemset使うなってエロイ人が言ってたよ。
782 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:58:20 ] memsetなんてもうずーっと使ってないなー
783 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:01:49 ] >>779 >memset(this,NULL,sizeof(*this)) ここでNULL使うのはおかしくね?
784 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:14:45 ] そもそもmemset()使うのがおかしいからどうでもいいよ。
785 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:47:58 ] www.kijineko.co.jp/tech/superstitions/initialization-by-memset.html >局所変数、特に集成体を宣言した後、実際に必要かどうかに関わらず、必ず memset でゼロクリアする人は大勢います。 >しかし、そんなコードを見かけたら、それを書いた人のコードはすべて疑ってかかった方がよいかもしれません。
786 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:55:34 ] 構造体単体でもmemsetする奴は危険だよ
787 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:03:41 ] 別にmemsetそのものは危険じゃないよ。
788 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:09:05 ] する奴は って書いてある
789 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:10:03 ] うん、そうだね。書いてあるね。 でもそんなことは関係なしにmemsetそのものは危険じゃないよ。
790 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:12:30 ] ポインタと全然関係ない話題ですねw
791 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:17:06 ] struct A a; memset(&a, 0x00, sizeof(struct A)); もう馬鹿かとw こんな後に if( a.hoge != NULL) とかやってる奴ちょっと来い ぬっこしてやるから
792 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:20:21 ] 勝手にすればぁ〜
793 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 05:16:33 ] 局所変数の初期化って不要なの? struct { int a; int b int c; } data; struct data; data.a = 0; とやったとき、bとcには何が入っているのか確定してる?
794 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 06:47:12 ] もちろん不定
795 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 07:40:39 ] >>793 スレ違い。まぁ、そもそもコンパイル通らないだろうからどうでもいいけど。
796 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 09:06:04 ] 構造体を初期化するのにmemset()を使わないなら、memset()なんて何に使うのさ? そもそもゼロクリアなんていらねーよ、って話?
797 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 10:27:06 ] >>796 そもそも NULL == アドレス0 って保証はないわけなんだが
798 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 11:20:52 ] >>797 メンバにポインタが含まれる構造体の話か。でもそれなら、 struct DATA data[10] = {0}; という書き方も正しい保障は無いということになるよね。どうすりゃいいの?
799 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 12:05:18 ] ={0} は正しい。memsetでゼロクリアするのとは異なる。
800 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 12:14:52 ] >>799 >>797
801 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 13:42:40 ] >>800 void *p = 0; などとしたとき、p はアドレス 0 を指すわけじゃないぞ。 定数 0 は処理系依存のヌルポインタのビットパターンを作り出す。 struct DATA data = {0}; は、構造体 DATA の各メンバを 定数の 0 (ビットパターンが 0 なわけではない) で初期化するから、大丈夫だよ。
802 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 18:47:35 ] 釣られすぎ
803 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 22:09:46 ] なるほど、釣りだったということにしたいわけか
804 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 22:26:20 ] ヌルポ インタ
805 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 00:41:13 ] >>804 ガッ
806 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 13:46:21 ] 今はVSでクラスなんかをガシガシ使ってるから使わないけど、 一昔前にUNIXで開発してた頃はstructでデータ構造を設計して、 使用時には memset(&data, 0x00, sizeof(data)); などのように初期化してから使う、というのが常套句だったよ。俺は。
807 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:09:53 ] はい、スレの皆さん 新年特別DQN >>806 入りました〜 かわいがってやってください。w
808 名前:806 [2008/01/14(月) 17:20:45 ] ■データ構成 #define DATAMAX 255 struct { struct { int code; char name[16]; } table[DATAMAX]; } data; ■初期化 memset(&data, 0x00, sizeof(data)); ■DB等からセット for(i=0; i<DATAMAX; i++) { data.table[i].a = a; data.table[i].b = b; } ■取得関数 char empty[16]; char *getName(char *code) { for(i=0; i<DATAMAX; i++) return data.table[i].name; return empty; } ■使用 strcpy(name, getName(code));
809 名前:806 [2008/01/14(月) 17:21:05 ] >>807 かなりはしょってるが、上のレスのようにやってた。 DQN?俺がDQN? 他人に頼らず、テメーだけの力で批判でも何でもしてみろや。 他力本願な口だけ野郎。
810 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:35:52 ] コンストラクタで初期化してメンバは隠蔽した方がいいと思う
811 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:53:10 ] 【虎の威を借る狐】 他人の権勢に頼って威張るザコのたとえ
812 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:12:21 ] >>809 本当にそんな汎用性のないキモイおもちゃ作り ずっとやってたの?w 取得関数とかクエリ合わせてチューニングも 選択もできねーしこんな設計じゃ拡張性もない ゴミすぎるだろw?
813 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:24:30 ] >>806 WindowsAPIのほとんどは今もそうだね
814 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:46:28 ] >>809 DQNかどうかは兎も角、>808を書いている時点でお郷が知れている。
815 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:53:08 ] やっぱり>>806 は痛い奴だったか そんな臭いがプンプンしたしなぁ 反論してみ?
816 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:58:26 ] お前のかあちゃんデベソ
817 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:59:35 ] きさまっ!いってはならないことをぉおぉぉおおおお
818 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:06:55 ] 環境や用途によってやり方は違うだろうに「キモイ」って評価しちゃう奴はある意味スゲェと思う。
819 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:23:30 ] >>818 OSS宗教様達は多いよ リーなんちゃらという変態指導者の 影響だろうけど 自分達の受け入れたくないコード=グロ って定義だし。
820 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:35:04 ] 実際見たら、グロなんだろ。
821 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 01:31:10 ] グロいものほど美味い。これは定説です。
822 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 07:03:52 ] ポインタ使った事無いから事故にならなかったんだろ。 こっそりやってるなら、どうせわからないからいいけど、 堂々と自慢されると、やっぱりな、あれだよ・・・
823 名前:796 mailto:sage [2008/01/15(火) 09:15:50 ] よーするに、memset()は使い道が無いってことかい?
824 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 10:40:09 ] >>823 環境依存でもよくて、標準の真っ当なコードに較べれば多少は速いかもしれないコードを使いたくて、 Intrinsicが用意されていないか使えなくて、インラインアセンブラが用意されていないか使えなくて、 他の手段が見つからないか、過去の遺物を使う為に必要。
825 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 12:05:51 ] とりあえず書いとけば誰かが直してくれるさ
826 名前:808 mailto:sage [2008/01/15(火) 14:26:44 ] まともな反論は>>812 くらいか。 かなりはしょってて共通の関数なんかをすべて省いてるから>>812 の感想はもっともだけど、 実際の事務処理アプリの現場ではその「キモイおもちゃ作り」とやらが蔓延していたのもまた 事実としてあるんだから、自分だけ高みから見下して一蹴してしまうすような>>812 は、俺には 少し世間知らずに見えてしまうな。 >>815 「やっぱり」ってなんだ? テメーで反論せずに誰かに反論してもらって「やっぱり」って思ったの? まさに>>811 に出てる「虎の威を借る狐」=ザコだなお前。 あと「反論してみ?」って見下してるけど、テメーは何も言ってないよねw なんなんだお前は〜w
827 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 14:27:45 ] こんなネタで盛り上がれるお前らの時間の贅沢な使い方に脱糞
828 名前:808 [2008/01/15(火) 14:31:40 ] このスレ、極少数は経験も知識も豊富っぽいのがいるかも知れないけど、 その他はザコばっかだね。しかも性格が悪すぎ。 >>806 に対しての>>807 は何だ。 知識も経験もないけど一方的に悪口言ってストレス解消ですか? 反論したいならテメーでしろ。 できないなら実のある話しろやボケ。 だから過疎るんだよこの板。
829 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 14:33:00 ] うん。
830 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 15:49:25 ] 血圧が高いんじゃない? 高血圧は万病の元だよ。 まじで心配
831 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 17:50:03 ] >>828 で、ちみはポインタの何がわからなくて躓いてるんだ?
832 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 18:12:13 ] ポインタとmemsetって関係なくね?
833 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 18:19:10 ] もとは、ポインタをビットパターン0にしちゃだめだろ、って話だったけどな。
834 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:26:38 ] >>810 といい、>>816 と>>817 の自作自演といい、ガキが多いのは感じる ゆとりって言葉は嫌いだけどつい使ってしまいそうな程
835 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:31:55 ] memsetの話出てからこのスレつまんなくなった
836 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:48:20 ] どこまで行けば面白くなるのか遡ってみたら>>1 に到達してしまった
837 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:51:28 ] >>834 とか>>828 あたりで十分面白いだろ。
838 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 21:15:09 ] 結局memsetで初期化することの問題点は、 浮動小数点数やポインタの内部表現が環境依存であるから 0.0やNULLに初期化されるとは限らないということだけ?
839 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 22:02:23 ] >>838 そだよ つか, memset なんて組み込みやるときの bss の初期化にしか使った事ねぇし…
840 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 12:36:15 ] 某A賞のシステムでもそんなの誰も気にせずmemsetしてるけどな
841 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 13:14:03 ] Cでgotoは絶対に使ってはいけない、という神話に似てる
842 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 13:51:46 ] >>835-837 m9(・∀・)自作自演だろ!! 違うかな? たぶん>>816-817 と同一人物と見た。もしこの推測が合っていたら、 おまいは姑息で卑怯なこざかしい人ですね
843 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 14:04:59 ] まじで病院行け。
844 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 14:44:02 ] 835は俺です 他は違います
845 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 15:18:02 ] 頭のおかしい人にマジレスしてもw
846 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 09:28:36 ] __,. -─-- 、_ , - ' _,´ --──‐- ) ,イ´__-___,. -‐ '__,. - '´ `ー----, - ' ´ ̄ `` 、__ __,ィ ヽ. `ヽ. , '⌒Y / 、ヽ ヽ ヽ. / / i /l/|_ハ li l i li ハ . // 〃 /l i|j_,.//‐'/ lTト l、l j N i | {イ l / l li //___ リ_lノ lル' lハ. ソ ___◎_r‐ロユ i| /レ/l l l v'´ ̄ , ´ ̄`イ !| ll,ハ └─‐┐ナ┐┌┘ _ ヘ____ ハ| ll∧ハヽ ト、 '''' r==┐ '''' /l jハ| ll ll /./┌┘└┬┘└┼────┘ロコ┌i 〃 ‖ レ'¨´ヽiへ. _ 、__,ノ ,.イ/|/ ノ ll l| </  ̄L.l ̄ ̄L.lL.! ┌┘| ll ll { ⌒ヽ_/ } ー‐<.__ ′ l| ‖ ‖ ‖ ヽ, /、 〈 |:::::::| `ヽ ‖ ‖ {. ハ ヽ Y`‐┴、::::v l ‖ ‖ |iヽ{ ヽ_ゾノ‐一’::::ヽ. | ‖ ‖ |i:::::`¨´-- :::......:...:.:.::.}| ‖ ‖ |i::::::ヽ._:::_:::::::::::::::::::_ノ | ‖ ‖ |i::::::::::::i___:::::::::::/ | jj::::::::r┴-- `ー‐ '⌒ | 〃:::::::マ二 _,ノ //::::::::::::i ー 一 '´ ̄::. ,','::::::::::::::i::::::::::::::::::::::i::::::ヽ
847 名前:デフォルトの名無しさん [2008/01/18(金) 13:58:42 ] ぴぴるぴるぴるぴぴるぴ〜
848 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:55:30 ] memsetだってwin32api使ってたらよく使うし まぁ、ようは、どんな関数でも使う奴しだいだろ
849 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:05:01 ] ほとんど見かけないようなプラットフォーム向けにも移植性を確保しておきたいかどうかだな zlibみたいなライブラリではそうする価値があるかもしれないが、俺が書くようなコードではどうでもいい…
850 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:27:36 ] >>849 スピード命のコードだと, 内周ループで数エントリの構造体を memset するのってやたらコストがでかい。 実際には、サブルーチンコールのオーバーヘッドがでかいんだが… 去年 MPEG 関連の仕事を途中から引き継いだんだけど、とろくって 使い物にならなかった元のコードの memset を代入文に変えただけ で実行時間 60% 程度まで短くなった。
851 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:35:04 ] それは使っているコンパイラが悪いような希ガス。
852 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:35:30 ] >>850 memset初期化を使うのは、システム起動時か、再起動時でしょ。 あとはオブジェクトが生成されたときとか。 頻繁に生成、破棄を繰り返すようなオブジェクトで、システム上重要な パフォーマンスに影響をあたえるものにたいして、memset初期化をするかしないか というのは「高速化」の話。memset初期化のよしあしの話ではない。
853 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:35:42 ] >>850 まぁそれはまた別の話かと
854 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:54:00 ] >>851 それは言えてるんだが、組み込み物ではコンパイラの選択肢は限られる。 ましてや、クライアント指定のコンパイラだ >>852 > システム上重要なパフォーマンスに影響をあたえるもの に、対して memset で初期化しておいて、直後にその大半を意味のある 値で再度上書きしてた。 > よしあしの話ではない。 かもしれないが、元のコードを書いた奴の神経をうたがったわな。
855 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:57:38 ] Win32APIみたいに設定項目が山のようにあり、 常に全部を使うわけでもなく、 0で埋められる項目の頻度が高ければ十分ありだろ。 C/C++以外では今時クラスインスタンス0フィルされる言語も珍しくもないし。 ケースを指定するでもなく一般論としてあーだこーだいってる奴はアフォ。
856 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:11:50 ] >>855 いいえ。 高が、struct someStruct foo = {0} で済むことのためにmemset()を使う必然性は殆どありませんね。 それがstruct someStruct * foo = malloc(sizeof(* foo))した領域でも同じこと。
857 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:29:25 ] memset使わないで struct someStruct * foo 何か処理 foo = {0};って感じでまた初期化すればいいだけ memset使うやつは馬鹿今の公開されている まともなソースでmemset使ってるのコードは皆無だぞ?
858 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:31:27 ] >>857 >foo = {0}; それ無理じゃね
859 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:38:01 ] 0fillがいかんからmemsetがいかんに話がずれてきてるな
860 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:38:59 ] パフォーマンスだけに限って言うと、memsetをインライン展開するコンパイラなら使う事もある。
861 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:50:15 ] >高が、struct someStruct foo = {0} で済むことのため 宣言と同時に初期化しない場合はどうするの? というよりこれってコンパイラ依存なんじゃないの?
862 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:51:49 ] memsetは危険だから使うなって manとかMSDNに記述あるんだな
863 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:54:46 ] >>862 具体的に書いてくれ。調べるの面倒
864 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:55:37 ] お前は何を言っているんだ
865 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:05:01 ] manページより: >説明 >memset() は s で示されるメモリ領域の先頭から n バイトを c で埋める。 >返り値 >memset() は s へのポインタを返す。 >準拠 >SVr4, 4.3BSD, C89, C99, POSIX.1-2001. 俺の目がおかしいのかもしれないが危険性がどこにもみつけられない。 MSDNとか読むきしないから他のヤツよろしく。
866 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:09:13 ] >memset() は s で示されるメモリ領域の先頭から n バイトを c で埋める。 これは嘘だろw nバイトをcで埋める可能性もあるが正解
867 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:10:50 ] >>866 日本語でおk
868 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:13:06 ] 冬 真 っ 盛 り
869 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:15:43 ] 埋めない可能性もあるのか? まぁSEGVるかもしれんが
870 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:18:25 ] >>869 >まぁSEGVるかもしれんが >>866 がそんなことで「埋めない可能性がある」とかバカなこというわけないじゃないか。 >>866 は、きっともっと違った根拠があっていってるのだよ。
871 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:19:58 ] ECCメモリを使っていない場合に起こるのかもしれないなw
872 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:27:17 ] >>871 ワロスwww その「可能性」言い出したら、マニュアルなんて書けない気がするがwww
873 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:28:46 ] 釣り堀だなw
874 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:35:45 ] >>867-873 こんなに釣れた
875 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:40:41 ] >>874 トイウコトニシタイノデスネ
876 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 12:18:16 ] struct someStruct foo = {0} これはできるけど、動的確保した構造体だと無理じゃね?
877 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 12:21:34 ] >>876 C99は可能 お前あほ杉w
878 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:00:41 ] >>876 struct someStruct * foo = malloc(sizeof(* foo)); struct someStruct blank = {0}; * foo = blank; よほど気の利かないコンパイラでもなければ、blankの実態は作られない。
879 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:06:25 ] なんと言う糞コードというか糞スレ・・・
880 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:14:39 ] >struct someStruct blank = {0}; こんなコンパイラがサポートしている「かもしれない」機能を 「使わないのはおかしい」と主張されてもな。
881 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:20:18 ] >コンパイラがサポートしている「かもしれない」機能 そうなの?
882 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:21:52 ] >>880 サポートしていないコンパイラをご存知ならご提示くださいませ。 以後規格外品として、広く存在を知らしめてまいりたいと思いますので。
883 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:22:15 ] >>881 そうだよ
884 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:23:16 ] >>882 むかし使ってた、ARMの純正コンパイラではサポートされてなかったな。
885 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:23:35 ] >>882 組み込み業界じゃザラにあるが…
886 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:24:52 ] もし論点があってそれを覚えているのなら3行にまとめてくれたまへ
887 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:26:15 ] つまり、昔のARM純正コンパイラは構造体の初期化ができないと?
888 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:26:47 ] >>884 , 885 つか、>>882 は「Cが処理系に依存しない高級言語だ」って 思ってる可愛そうな奴なんだよ
889 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:28:01 ] >>887 いや、全部のメンバに代入すればOK struct A { int a; int b; }; OK:struct A a = {0, 0}; NG:struct A a = {0};
890 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 15:42:06 ] お前らまずは日本語を学べ スレタイが読めるようになったらまた来い
891 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:37:52 ] ポインタは友達!
892 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:53:40 ] ポインタ「げ。また>>891 だよ・・・マジウザイ・・・
893 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 01:38:56 ] ひでえw
894 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:51:06 ] 昔記事を見て馬鹿にしてた教材が一番わかりやすかった
895 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 22:18:11 ] memsetを使う利点は使い方によっては構造体の初期化のソースを短く出来る事かな 巨大な行列を持つ構造体を初期化するとか普通に代入でまかなうとマジで馬鹿にならないくらいソースが膨らむから ループで回して初期化するのも遅いしな
896 名前:デフォルトの名無しさん [2008/01/21(月) 00:52:45 ] Cプログラマ必須テキストです! mori.eco.to/
897 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 01:23:47 ] >>896 どうでもいいのだが・・・ >当然ですが、あらゆる標準関数の使用を認めません。 > >・strlen() を自作せよ。 >・strcat() を自作せよ。 標準関数の使用を認めないくらいなら、strlenとかstrcatとかキケンな 関数じゃなくて、ふつうはもっと安全な代替関数を自作するでしょ。
898 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 02:16:15 ] >>896 >C++未経験ながら、1人でC++の10万行のソースコードの保守及び、3万行の開発を行った。 これ単にCとして使ったとかじゃ
899 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 02:38:15 ] いまどき行数で規模示すなんて クラス数と各クラスのメソッド数で競ってくれ っつーかすれ違いか
900 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 02:57:11 ] 競うなよ。どっちも少なければ少ないほど良い。
901 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 05:07:32 ] さすがにクラスは適切な数ってのがあるだろうな。
902 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 11:28:41 ] >>896 は宣伝でマルチしてるから無視すべし
903 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:02:57 ] PIC等の単純なCPUで機械語でもやってアドレッシングモードを習えば ポインタは理解出来るんじゃね? 余計に混乱するかな?
904 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 18:50:37 ] PICとかアドレッシングモードとかわけわかめなんだけどどうすれば習えるの?
905 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 19:33:40 ] PICは余計なところが気になりすぎ、16ビット以上推奨だな。 AVRとかHC08とかARMがいいんじゃね? あと、アセンブラのアドレスはせいぜい指してる先のバイト数 の情報くらいしか持ってないから、ポインタまでには、まだまだ 壁があるのでよろしく。
906 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 20:47:32 ] >>895 おれは構造体を定義したら、必ずその初期化関数を作るけどな。 だからソースはさほど膨らまない。 まあその関数の中でmemsetをやっている場合もあるんだが、 それでも素のmemsetは使わないな。
907 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:43:28 ] 動的にその行列のサイズが変わる、その平均が100X100から1000X1000近くになって 最悪5千近くなる行列は動的に変わるんで代入じゃ無理だし、ループでまわして初期化するよりはmemset使った方が速度は確保できるし 何が糞なんだかなぁと思うわw まあ、動的に確保して中身をゼロクリアしたいのならcalloc使えって話だけどなw しかし、途中で初期化したくなったらmemsetかな?
908 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:09:00 ] >>905 > あと、アセンブラのアドレスはせいぜい指してる先のバイト数 > の情報くらいしか持ってないから TRON chip を否定したな!WwwWW
909 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:47:17 ] >>908 > TRON chip を否定したな!WwwWW は? TRON Chipのポインタも、持ってる情報はアドレスだけですが? ポインタに情報を持たせるのはLisp処理系とかで、ワードアラインの都合で 使わない下2bitに型の情報を入れ込んだりとか、アドレスが24ビットだった 68000用のやっぱりLisp処理系で上8bitに型の情報を入れたり、とか。 ポインタが本格的に(?)型の情報を持ってるアーキテクチャったらIBMの System/38→AS/400とかだろ。
910 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:12:54 ] >>909 ショボいCPU使ってプログラムを作ると自分でポインタを作って管理しなきゃいけなくなるよ。 それでポインタがマスター出来るだろうと思う。
911 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 01:11:14 ] >>907 そういう0クリアする必要があるときのmemsetには、誰も異論を唱えていない。
912 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 01:16:18 ] >>907 それやるとどこか1バイトだけ 初期化されず危険というコンパイラもある
913 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 01:24:46 ] >>912 「そうする機能を持つ」ということと、「バグでその機能が働かない」というのを ごっちゃにすると、ワケワカンナクなるからやめようぜ。