1 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 03:01:40.24 ] C言語の*入門者*向け解説スレッドです。 ★前スレ C言語なら俺に聞け(入門編)Part 95 toro.2ch.net/test/read.cgi/tech/1326459906/ ★過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000 ★教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 156代目 toro.2ch.net/test/read.cgi/tech/1328276597/ ★C++言語については避けてください。C++対応明記スレへどうぞ ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 長くなりそうなコードはcodepadに貼り付けてもいいでしょう codepad.org/
79 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 17:56:02.05 ] 一時変数のtmpを使いまわすかどうかとか、 2個目のループでi j を使いまわすかどうかってレベルの気がする。
80 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 18:29:11.17 ] 再利用か、別変数か、>>50 の意見も聞いてみたい。 >>50 の逆をいけばいい。w
81 名前:77 mailto:sage [2012/02/06(月) 18:39:41.19 ] >>79 たぶんそのレベルでした
82 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:17:46.90 ] オブジェクトの解体と再構築のコストが大きくて 可読性を犠牲にして再利用したくなるぐらいなら最利用する そうでなければ普通に新しく作る
83 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/06(月) 19:23:57.62 ] >>77 まともな最適化機能をもったコンパイラなら再利用は避けた方が効率的なプログラムになる可能性が高い。 最適化の前段階でのフロー解析において、どの変数がどこに利用されるか等のプログラムの流れを検出しようとするが、 関係の無いところでの使い回しがあると解析しにくくなる。 これは人間にとっても同じで、関係の無い使い回しがあると流れがわかりにくくなり易い。 コンパイラが C99 に対応しているならループ変数程度のものは for (int i=0; i<n; i++) hoge(); というようにその場限りの使い捨てがやりやすいので積極的に使うといいと思う。 昔の C は関数の先頭でしか変数の宣言をできなかったが、今ではどこでも宣言できるので、 使うところの近くで宣言し、なるべく狭い範囲でだけ使うのが近代的なスタイルと考えられている。 とは言うものの、これらはあくまで原則。 やりすぎるとそれはそれで不都合があることもある。 読み易さや効率はケースバイケースなので盲目的に従うのではなく、 どちらが良いか個別の「意味」を自分なりに考えよう。 プロジェクトによって書き方にガイドラインを設けているものもあるので、 既存のスタイルを参考にするのもいいかもしれない。
84 名前:77 mailto:sage [2012/02/06(月) 19:29:34.66 ] 参考になりました。みなさんありがとうございます!
85 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:33:14.81 ] C99以外の環境ってブロックの先頭以外で変数宣言できたっけ?
86 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:35:19.44 ] void func(void) { int x; hoge(x); { int y; fuga(x, y); } } 的な感じで書けるから実質宣言場所に制限はないと見てもいいよ
87 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:36:31.93 ] できないよ
88 名前:87 mailto:sage [2012/02/06(月) 19:37:04.79 ] >>85 あてね。
89 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:38:41.23 ] >>80 しばらく>>50 を引き合いに出しそうな感じがするからコテつけてもらえると助かる。
90 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:40:58.79 ] > プロジェクトによって書き方にガイドラインを設けているものもあるので、 > 既存のスタイルを参考にするのもいいかもしれない。 >>50 のように聞きかじりの知識を振りかざして混乱させるはた迷惑なバカが ガイドラインを作っていることも多いので、プロジェクトのガイドラインに は疑いの目を向けることも重要。
91 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:54:15.48 ] また変なのがでてきたなぁ… コテ禁止にはしなかったんだっけ?
92 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 21:02:11.80 ] コテつけてもらったほうがありがたい
93 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 21:07:17.15 ] 逆コンパイルでソースが復元できないC系のwindowsフォームアプリの開発言語でVSに入っているのはなんというものですか?
94 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 21:07:44.89 ] >>92 いや、コテつけるようなやつは出入り禁止で。 >>93 スレ違い。
95 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 21:08:04.00 ] >>85 C11ならできるだろ
96 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 21:16:17.39 ] いや。>>50 はぜひコテをつけて、このスレのおもちゃになってもらいたい。
97 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 21:25:08.17 ] いやいや。すでに>>50 って名前で定着してるだろw
98 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:11:33.58 ] float a,b,c; a = 425; b = 293749; c = (float)(((double)a) * ((double)b)); printf("%f %f\n",c,a*b);
99 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:27:12.44 ] >>98 printf()にdoubleで渡してるからだろ。 何がいいたいんだ? また>>50 か?
100 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:28:09.03 ] ワクワク、>>50 の新作ギャグかな。
101 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:32:12.29 ] 初心者向けにC言語の暗黙のルールやバッドノウハウがまとまってるサイトとかってないかな getsは使うなとかscanfは使うなとかそういうの
102 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:42:48.60 ] C FAQの初心者版って事? 確かにC FAQ理解できなくて>>50 になってしまったら悲惨だからなあ。 2chならいいけどリアルでやったら生きていけないよなあ。w
103 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:43:53.39 ] お前ら容赦ないなwww
104 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:46:15.96 ] >>101 バッドノウハウを学ぶタイミングは難しいとおもう。 非推奨の関数に関してはコンパイラの警告で。
105 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:50:00.27 ] 今Macのxcodeでc言語してるんですけど質問はここでいいですかね?
106 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:53:52.00 ] mac板にxcodeスレがあるみたいだけど。そこじゃダメなの?
107 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 23:24:50.60 ] 新Mac板は基本objective-cや変化の多い環境環境やアプリや機器の登録とかの話題多いからcだけとかそうゆう感じじゃないんですよね。。MacでCすると窓にはないイレギュラーな事態とか起こったりするんだろうか、? あ、すみません質問は事故解決しました
108 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 23:43:06.17 ] ターミナルでgcc打ってるレガシーな感じでCの勉強してるのかな?
109 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 23:55:33.61 ] xcodeのiPhoneアプリやMac用ソフトとかのテンプレの中にcのテンプレがありますねん メモリ2Gくらい使うソフトでやってるからレガシーではないですな
110 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 23:58:27.67 ] >>54-55 馬鹿すぎて話しにならない。 >>59 副作用完了点舐めすぎ。 関数呼び出しが副作用完了点と言うのは正しいが、今回の問題は引数の評価だから、全然違う話。 例えば int foo(int x, int y){ return x + y; } int main(){ int a = 1; int b = foo(a++, a++); printf("a = %d, b = %d\n", a, b); return 0; } ってやってみればわかる。 引数の評価毎に副作用完了点があるなら、評価の順序にかかわらず a = 3, b = 3 になるはず。(GCC/2.95) ところが、コンパイラによっては a = 3, b = 2 になる奴がある。(Visual Studio 2010) もちろん両方ともに処理系としては正しい動作。 そもそも式がダメなのに、それに含まれる関数の引数評価に副作用完了点があると思えるなんて馬鹿すぎる。
111 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:05:40.28 ] まだほざいてるのかよ。 誰も引数の評価ごとに完了点があるなんて言ってねーよ。
112 名前:デフォルトの名無しさん [2012/02/07(火) 00:06:24.95 ] a++の代わりにadd1(&a)とかにしてみろよ。
113 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:14:26.36 ] やたら3項演算子使いたがるよね、自称玄人プログラマはw
114 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:15:30.95 ] まぁ普通は低レベルに合わせないといけないから禁止されてるからそのせいだろw
115 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:17:41.25 ] 3項演算も禁止しなきゃならないぐらいヘボグラマしか居ない環境でまともなアプリケーションなんて作れるの?
116 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:18:30.88 ] まぁお前も含めて大抵のとこはそんなもんだよ。
117 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:18:37.62 ] >>4 のソースとかニヤニヤしちゃう
118 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:28:39.58 ] int fibo(int a) { if(a == 0) { return 0; } else if(a == 1) { return 1; } else { return ( fibo(a - 1) + fibo(a - 2) ); } } ↓ int fibo(int a) { return a == 0 ? 0 : a == 1 ? 1 : fibo(a - 1) + fibo(a - 2); } おれってかっけー、いやっほぅ!
119 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:30:23.33 ] returnの後にelseとか、いつも間抜けに見えるよね。
120 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:36:49.58 ] やってることは大したことないんだけど、記述次第で凄そうにみえる3項演算子
121 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:39:38.48 ] まぁ理解してたらその逆だと思うけどなw
122 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:41:31.76 ] おすすめの本教えて質問はできません
123 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:41:37.31 ] そもそもif-elseの羅列と三項演算は使い道が違うから 比較すること自体がナンセンス
124 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:46:33.27 ] ほうほう。 >>4 の例が使うべき例だとそういうことだね
125 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:47:20.15 ] そんな低レベルの話はしなくていいよ。
126 名前: ◆QZaw55cn4c mailto:sage [2012/02/07(火) 00:57:09.53 ] >>120 三項演算子をネストに使うのが便利です。 codepad.org/kd86JdbP
127 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:01:37.22 ] この作例の利点は何だ?w
128 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:02:51.96 ] 三項演算ってのは条件式から値へのマッピングなんだよ 条件分岐とは意味合いが異なる
129 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:04:30.24 ] うむ、その意味合いの違いが生かせる作例とは?
130 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:08:07.69 ] Perl使う様になれば理解できると思うよ
131 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:18:33.29 ] 三項演算子は1段までなら簡潔にかけていいこともあるだろうが、 それ以降のネスト化はただの技巧披露にしか見えない 仮に、最適化オプションありでコンパイルしたコードをディスアッセンブリしてみて、 ソースを三項演算子で記述したほうが命令数少ないよって話なら別だが 慣れればフツーに読めるだろ、低能には無理だろうがな とか言い出す玄人()が出てきそうなネタだね
132 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:20:46.78 ] むしろ3項のほうがすっきりして読みやすいと思うんだけど
133 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:22:18.38 ] カンマ式混ぜると痛い事に成るしな
134 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:23:15.94 ] >>131 そう? (cond) に対応して便利と思わない?
135 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:39:11.04 ] >>134 ん?どゆこと?
136 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:45:03.81 ] で、どこに自称玄人プログラマがいるんだ? 色々禁止してやらないとダメな>>115 のようなヘボグラマしかいないようだが。
137 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 02:08:06.07 ] >>136 そういうあなたは?
138 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 02:11:15.72 ] 質問には質問で返す。 典型的なヘボ。
139 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 02:13:56.08 ] これを俗にブーメランというのだよ >>136
140 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 02:14:24.49 ] そして論点をずらす。
141 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 03:15:20.54 ] #include <stdio.h> void func(){ printf("i am func.¥n"); } int fibo(int a){ return a == 0 ? (a = 1, 0) : a == 1 ? (a = 2, func(), 1) : fibo(a - 1) + fibo(a - 2); } int main(){ printf("%d¥n", fibo(10)); return 0; }
142 名前:デフォルトの名無しさん [2012/02/07(火) 03:31:12.45 ] fatal error RC1015: cannot open include file 'l.jpn\windows.rc'. リソースファイルのコンパイルに失敗します どうすれば解決しますか?
143 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 03:41:43.09 ] >>126 それに慣れるとPHPでびっくりするからやめたほうがいいよ
144 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 06:06:31.80 ] おまいら、教えてくれ page faultの許容ってどんくらい? process explorerで測定したら2000くらい。 バッチプログラムなんだけど、バッチで2000って多いですか?
145 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 06:30:04.04 ] スレ違い。
146 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 06:49:49.88 ] int x = 0; printf("%d %d", ++x, ++x);
147 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 08:28:54.91 ] >>141 もはやあほだろ。。
148 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 09:51:11.12 ] >>2 #include <stdio.h> void fibo(int *a, int *b) { *b += *a; *a = *b - *a; } int main(void) { int sum, a, b; for(sum = 0, a = 0, b = 1; a <= 4000000; fibo(&a, &b)) { if(a % 2 == 0) { sum += a; printf("%d %d\n", a, sum); } } return 0; }
149 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 10:10:42.09 ] codepad.org/DumZG0hn
150 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 13:14:55.81 ] static unsigned long long fib(unsigned n) { if (n == 0) return 0; static unsigned long long a[94] = {0, 1, }; bool inRange = n < sizeof(a) / sizeof(* a); if (inRange && a[n] != 0) return a[n]; unsigned long long val = fib(n - 1) + fib(n - 2); if (inRange) a[n] = val; return val; }
151 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 13:39:44.57 ] int add_fibo_evnn(int n){ int a=0,b=1,c=0,d; while((d=b,b+=a,a=d)<=n)c+=d*(~d&1); return c; }
152 名前:デフォルトの名無しさん [2012/02/07(火) 15:46:57.40 ] C言語のプログラムレポート15個中3個提出しなかっただけで3段階評価で Cだった...8割出してC(可)ってありえないだろ。ふつうはAだよな。 みなさんどう思う?
153 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 15:53:13.11 ] 3段階評価ならCって不可じゃねーの?普通 3段階なら、全提出でB、内容がマトモでAだな 提出してないのはCでも文句言えないだろ
154 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 15:53:54.59 ] プログラムの出来がパーフェクトで8割提出なら80点 プログラムの出来が80点で8割提出なら80*0.8=64点 プログラムの出来が90点で8割提出なら90*0.8=72点 00-60 不合格 60-70 C 70-80 B 80-100 A お前のプログラムの出来が80から90に満たない程度の出来だったと判断されたんだろ
155 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 15:55:05.69 ] パンデモニウムさんは可愛いけど声がイラつく
156 名前:デフォルトの名無しさん [2012/02/07(火) 16:03:32.42 ] >>154 専門科目が6割以上合格ってどんだけ昔の考え?
157 名前:デフォルトの名無しさん [2012/02/07(火) 16:08:14.75 ] A 優 B 良 C 可 D 不可 だろw Aくれない教授はゴミだよ。生ゴミ以下。
158 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:18:57.38 ] それ4段階じゃね? レポートのみなら未提出がある時点でAはあり得ないだろ
159 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:21:29.31 ] >>158 単位がくれるっていう前提で3段階っていっちゃったね。 ふつうはどの大学も合格がABCの3つだからね。
160 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:29:03.64 ] 未提出がある時点でAがありえない、とまではいわないが、 未提出があるにもかかわらずAを与えうる回答をそれまでにしたかどうかが気になるな
161 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:30:27.44 ] つまり、求められた回答と同じレベル(テストで言うと100点)の回答しか出していないなら、未提出がある時点でAはない。
162 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:46:10.86 ] 実は本当は8つ提出してなくてぶっちゃけAとかどうでもよくて 単位が貰えるか不安だったけど安心した俺内野手
163 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:01:57.43 ] >>159 「単位をくれる」なのか「単位が貰える」なのか つか前提ってすごいな。最近の大学はそんなもんなのか? >>162 教授次第だけど1/3以上未提出なら普通はDになるんじゃないかな
164 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:02:21.17 ] むしろ全部提出してる奴は少ないからな。必修なら落とされないと思う。
165 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:10:40.98 ] そういや私の通ってた大学も(頭が)足りないやつは追加提出させられてた気がするな 必修ならほぼ落とすことは無いか
166 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:25:23.02 ] 選択がないので1つでも落すとアボン。
167 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:31:58.14 ] 落とされない大学なんぞに意味はないな。
168 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:57:20.43 ] 情報系じゃなかったけど レポート半期で12本初回抜き打ち試験中間試験定期試験とか当たり前のようにやって 全部提出出席しても試験でしくじって落とされるやつがちらほらいて地獄絵図だった 後輩にはうちの大学には絶対に来るなと忠告したよ
169 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 18:34:08.84 ] 何の為に大学に行ってるの?
170 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 18:35:02.15 ] 行かないと社会が人間扱いしてくれないからとりあえず
171 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 18:43:35.47 ] >>168 普通だろそれ
172 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 18:53:04.52 ] 必修だから落とされないとか、そんな世の中なの?
173 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 18:59:29.22 ] 関数func()内で int data[177][23]が定義されており、データが関数内で入れられるとします。 この関数の外から、2次元配列のポインタのポインタを渡し、int data[177][23]のアドレスを引数で返したいのですが、 void func( @ ){ int data[177][23]; A = data; } void func2(void){
174 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:01:40.10 ] 失礼しました。途中で送信してしまったようで・・・ 改めまして 関数func()内で int data[177][23]が定義されており、データが関数内で入れられるとします。 この関数の外から、2次元配列のポインタのポインタを渡し、int data[177][23]のアドレスを引数で返したいのですが、 void func1(@){ int data[177][23]; A = data; } void func2(void){ B // 2次元配列のポインタのポインタの宣言 func1(C); } @〜Cの記述は、どの様にしたらよろしいでしょうか?
175 名前:174 mailto:sage [2012/02/07(火) 19:03:24.76 ] int data[177][23]の実体はfunc1()が持ち、 他の関数からその中身を参照にしたいのです(グローバル変数使用不可) 宜しくお願い致します。
176 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:06:05.04 ] > 関数func()内で
177 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:07:47.55 ] mallocを使うか根本的なところから見直す
178 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:15:15.24 ] void func1( *(*pArray)[23]){ int data[177][23]; *pArray = data; } void func2(void){ int *pArray[177][23]; // 2次元配列のポインタのポインタの宣言 int ans; func1(pArray); ans = pArray[0][0] + pArray[176][22]; } イメージとしてはこんな感じですが、もちろんこれでは上手く行きません・・・
179 名前:174 mailto:sage [2012/02/07(火) 19:17:27.61 ] int data[177][23]をグローバルに持って行ければ全然問題ないのですが、 事情があって、それが出来ないのです・・・ ※私に与えられてる権限としては、func1の引数の変更、func2の製作
180 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:18:57.51 ] ゴミコード発生の瞬間である。
181 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:20:25.28 ] やりたい事がさっぱり分からん エスパー待ち
182 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:25:29.62 ] その実装だと誤動作するよ。自動変数で調べてね。 以下のいずれかの修正をしてもらう必要がある。 @ void getData(*****) { . static int data[N][M]; } Aソースを分割して、 static int data[N][M]; void getData(*******); B malloc つかう。
183 名前:174 mailto:sage [2012/02/07(火) 19:29:37.65 ] >>182 おお! すみません・・・static扱いでお願いします。 実際はstaticでした。懸案事案の抽象化に失敗してしまいました・・・ void func1(@){ static int data[177][23]; A = data; } void func2(void){ B // 2次元配列のポインタのポインタの宣言 func1(C); }
184 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:31:48.22 ] >>181 知りたいのは、「2次元配列のポインタのポインタ」を引数に渡してアドレスを入れてもらう やり方です
185 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:43:35.47 ] @int*** value A*value Bint** data C&data で、できると思うけど、何がやりたいのかは知らないし、あまりよくないコードな気がする。 やりたいこと書いて代案出してもらったほうがいいと思うけど、まあ、とりあえず。
186 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:53:39.40 ] ローカルstaic変数のアドレスを取るとかグローバルと大差ないわ いや、グローバルはグローバルだって意識できるからまだいいけど これじゃあソレもできないから最低最悪だな
187 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 20:40:54.32 ] 静的なオブジェクト/動的なオブジェクト(free必要) これ以上の情報を意識する必要はないし、意識しなけりゃならないのは最低最悪。 グローバル? 今時使わないよね。w
188 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 20:44:17.33 ] 質問 関数って引数は何個までとか何バイトまでにした方が良いってのはある? ある程度を超えるとメモリに積む作業が増えるので急激に遅くなる、とか。 大差無いのかな。
189 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 20:49:42.42 ] そんなことを気にするのはお前には早すぎるよ。
190 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 20:54:56.96 ] >>187 こいつ最高にアホ
191 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 20:59:26.69 ] >>189 初心者は速度を気にしちゃいけないなんて決まりがあったのか。 知らなかったわ、すまん。
192 名前:デフォルトの名無しさん [2012/02/07(火) 21:03:19.05 ] >>188 変数固めて構造体にして、ポインタで渡す 俺なら
193 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/07(火) 21:03:52.10 ] >>188 パフォーマンスへの影響は環境によるので実測しないとなんとも言えないけど、 計算量的によほど厳しい条件下でなければはっきりわかるような差は出ないよ。 回数が多く呼ばれる関数ならちょっとした差が全体に多きく影響することもあるけど、 どこまで許容できるかは程度問題なのでスパッと基準を決められるものではないな。
194 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:07:52.89 ] 問題になるまでほっときゃいい 腐りだしたら破棄して作りなおしゃいい ダしゃいいタマがうずくなら
195 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:09:28.84 ] >>191 決まりではないが鉄則ではある
196 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:10:39.31 ] >>188 大雑把に1KB以下なら気にしなくていい
197 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/07(火) 21:12:29.93 ] >>192 Windows API はそういう感じだね。 でも、その構造体だってどこかでメモリを消費するわけだし、 構造体に値を放り込むのだってゼロコストなわけじゃない。 同じデータをある程度何度も繰り返して渡すような状況ならいいが、 そうでないならパフォーマンスの差はほとんど出ないと思う。 バイナリ互換性を維持したまま構造体に要素を追加して拡張できる点で有利ではあるので、 長期的にインターフェイスを維持したいときには考慮に値する方法と言える。
198 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:19:43.77 ] こういうくだらん話しか出てこないから初心者は気にすることはないってこと。