[過去ログ]
C言語なら俺に聞け 151 (1002レス)
C言語なら俺に聞け 151 http://mevius.5ch.net/test/read.cgi/tech/1554171817/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
353: デフォルトの名無しさん (ワッチョイ 6752-ahOC) [sage] 2019/05/04(土) 05:21:50 ID:I31OC90J0 何故誰もscanf("%c", str[i])に突っ込まないのか http://mevius.5ch.net/test/read.cgi/tech/1554171817/353
354: デフォルトの名無しさん (ワッチョイ 177b-VjZg) [sage] 2019/05/04(土) 05:39:39 ID:RAMEL17i0 >>350 「入力処理」のforループで、「50文字入力されたら」を判定してるけど、 もう一方の終了条件「Enterが押されたら」を判定してないからでしょ。 1文字受け取るごとに、Enter '\n' ならループを抜ける、をやらなきゃ。 というわけで >>315 に至る。 >>353 このスレッドの伝統かと。>>299 以下を参照のこと。 あちらはスルーしたのに、こちらでツッコむのは抵抗感がある、みたいな。 http://mevius.5ch.net/test/read.cgi/
tech/1554171817/354
355: 354 (ワッチョイ 177b-VjZg) [sage] 2019/05/04(土) 10:20:54 ID:RAMEL17i0 誤: というわけで >>315 に至る。 正: というわけで >>351 に至る。 315 を確認したところ、まるっきり見当違いでもなかったね。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/355
356: デフォルトの名無しさん (アウアウウー Sabb-H3I8) [] 2019/05/04(土) 10:47:02 ID:lguQ1Ppja >>354 >>299は見逃していたなあ。空目だな。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/356
357: デフォルトの名無しさん (アウアウウー Sabb-vI8p) [] 2019/05/04(土) 11:41:09 ID:yT0QTmUja >>350 もし宿題が本当に scanf(“%c”,str[i]) と書いてある場合は先生が間違えてるので「 scanf(“%c”, &str[i]) ですよね?」とツッコミを入れてみると良い。 そうすると君はできる学生と思われて成績が上がるるか、または気に入らんやつと思われて成績が下がると思う。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/357
358: デフォルトの名無しさん (トンモー MM93-qoXq) [] 2019/05/04(土) 13:40:22 ID:tOD9kuurM そういえば東大では今でも C言語が必修なのか? まじ時代遅れの馬鹿だと思ってたら、 Cしかできない在日の馬鹿教員が いるのだとか http://mevius.5ch.net/test/read.cgi/tech/1554171817/358
359: デフォルトの名無しさん (ワッチョイ 0663-Cg3z) [sage] 2019/05/04(土) 13:51:43 ID:k+B84EwL0 学歴コンプレックスの人? http://mevius.5ch.net/test/read.cgi/tech/1554171817/359
360: デフォルトの名無しさん (ワッチョイ 6752-ahOC) [sage] 2019/05/04(土) 14:16:41 ID:vXlxEQ1E0 参照型とか出てくるのにそもそも参照がなにかも理解出来てないにわかオブジェクト指向が増えるよりよっぽどマシよ なんの言語とは言わないけども C言語なら理解しなければ先に進まないから http://mevius.5ch.net/test/read.cgi/tech/1554171817/360
361: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/04(土) 14:19:50 ID:7fnHNdb20 >>358 C が分からないようでは話にならないのでは? http://mevius.5ch.net/test/read.cgi/tech/1554171817/361
362: デフォルトの名無しさん (トンモー MM93-qoXq) [] 2019/05/04(土) 14:47:16 ID:tOD9kuurM >>361 トヨタ系の研究所には Cの分かる研究員がもういないのです 研究には全く支障がないです 組込みやってる高卒やFランが Cをやるべきでしょ? http://mevius.5ch.net/test/read.cgi/tech/1554171817/362
363: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/04(土) 14:55:00 ID:7fnHNdb20 >>362 それは多分ありえない話でしょうね、なぜならば C は計算機言語の基本で、各種書籍ではアルゴリズムの記述に C を使うものが大半ですから 本も読めない人がトヨタの研究者とか、あなたの空想の話なのでは? http://mevius.5ch.net/test/read.cgi/tech/1554171817/363
364: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/04(土) 15:22:49 ID:Yh80Q70x0 アルゴリズムの勉強はpythonがいいよ http://mevius.5ch.net/test/read.cgi/tech/1554171817/364
365: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/04(土) 15:25:54 ID:7fnHNdb20 >>364 python で二分木の実装とかできますか? http://mevius.5ch.net/test/read.cgi/tech/1554171817/365
366: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/04(土) 16:05:03 ID:Yh80Q70x0 >>365 できますん http://mevius.5ch.net/test/read.cgi/tech/1554171817/366
367: デフォルトの名無しさん (トンモー MM93-qoXq) [] 2019/05/04(土) 16:07:19 ID:LvYM7SOrM >>365 そんなのはFランの仕事でしょ? http://mevius.5ch.net/test/read.cgi/tech/1554171817/367
368: デフォルトの名無しさん (ワッチョイ bb87-ahOC) [sage] 2019/05/04(土) 16:13:20 ID:8Q7/PMC20 論文の次はFランか、哀れだなw http://mevius.5ch.net/test/read.cgi/tech/1554171817/368
369: デフォルトの名無しさん (ワッチョイ 6752-ahOC) [sage] 2019/05/04(土) 16:49:12 ID:vXlxEQ1E0 やっぱり相当コンプレックスの塊で頭悪いんだろうなぁ http://mevius.5ch.net/test/read.cgi/tech/1554171817/369
370: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/04(土) 18:28:05 ID:7fnHNdb20 >>366 本当ですか?ポインタがない python では無理なんじゃないですか!? http://mevius.5ch.net/test/read.cgi/tech/1554171817/370
371: デフォルトの名無しさん (アウアウウー Sabb-vI8p) [] 2019/05/04(土) 18:39:36 ID:yT0QTmUja pythonって参照ないの? http://mevius.5ch.net/test/read.cgi/tech/1554171817/371
372: デフォルトの名無しさん (アウアウエー Sa3a-3iRC) [sage] 2019/05/04(土) 18:43:01 ID:gINSNBZZa 真面目に言うとpythonは基本的に全部参照渡しだね。 参照したものを直接いじれるかというとそうでない場合があるけども。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/372
373: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/04(土) 19:05:41 ID:7fnHNdb20 >>372 なるほど、ではユーザー定義の型は自動的に参照扱い、すなわち Java みたいなかんじなんですね であれば苦労すれば二分木を実装できますね、大変失礼いたしました http://mevius.5ch.net/test/read.cgi/tech/1554171817/373
374: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) [sage] 2019/05/04(土) 19:18:51 ID:21Of2ELD0 >>370 Python に限らず動的型の言語の多くは変数に値を入れるんじゃなくて、 オブジェクトと変数の間に束縛 (bind) を作ることで成り立ってる。 辿ることでオブジェクトを参照するんだ。 実質的にポインタだよ。 むしろポインタしかない。 (小さい値 (小さい数値とか文字とか) はアロケーションを抑制するためにそのまま ワードに突っ込むような最適化をする言語 (処理系) もあるけども。) http://mevius.5ch.net/test/read.cgi/tech/155417
1817/374
375: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/04(土) 20:22:17 ID:7fnHNdb20 >>374 Java ならば boxing でヒープにとる値とスタックに取る値とをある程度(意識せずに)変換できますね(そういう C/C++ like な意識が皆無ではない、という意味) ただし、二分木に関してはいいたいことがまだあって、「本物の」二分木は二重ポインタ(ポインタのポインタ)が必要なのではないか?と思っています さすがに Java には二重ポインタはない、そんな用途の言語じゃない Python や ruby にはあるのでしょうか? http://mevius.5ch.net/test
/read.cgi/tech/1554171817/375
376: デフォルトの名無しさん (アウアウエー Sa3a-3iRC) [sage] 2019/05/04(土) 20:55:58 ID:cZ5M6KFWa 二重ポインタを何に使う? Cだと引数でノードのオブジェクトを返す辺りか? http://mevius.5ch.net/test/read.cgi/tech/1554171817/376
377: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/04(土) 21:01:18 ID:7fnHNdb20 >>376 ノードを追加する関数add の引数を add(&root, Object) ってするでしょ?&root ってことは、struct *node のアドレス、すなわち struct node ** が必要なのではないかと http://mevius.5ch.net/test/read.cgi/tech/1554171817/377
378: デフォルトの名無しさん (アウアウエー Sa3a-3iRC) [sage] 2019/05/04(土) 21:43:09 ID:cZ5M6KFWa >>377 わからんが、Cでも戻り値でポインタを返せばいいんじゃないか? http://mevius.5ch.net/test/read.cgi/tech/1554171817/378
379: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) [sage] 2019/05/04(土) 21:46:08 ID:21Of2ELD0 >>375 参照を持つオブジェクトへの参照を持てるんだから、事実上の二重ポインタとして使えるよ。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/379
380: デフォルトの名無しさん (ワッチョイ bb87-ahOC) [sage] 2019/05/04(土) 21:57:52 ID:8Q7/PMC20 二重までは使うんだよなあ 三重をなぜ使わないか、説明できるか?w http://mevius.5ch.net/test/read.cgi/tech/1554171817/380
381: デフォルトの名無しさん (ワッチョイ d701-o1CB) [sage] 2019/05/04(土) 22:09:57 ID:RtDHzLy60 ガベージコレクションと裸のポインタって相性が悪いような http://mevius.5ch.net/test/read.cgi/tech/1554171817/381
382: デフォルトの名無しさん (ワッチョイ e201-VrjD) [sage] 2019/05/04(土) 22:15:35 ID:eVIwB2YR0 >>378 2個返したい時とか、戻り値は成功かどうかのコードを返したいとか http://mevius.5ch.net/test/read.cgi/tech/1554171817/382
383: デフォルトの名無しさん (アウアウエー Sa3a-3iRC) [sage] 2019/05/04(土) 23:07:46 ID:cZ5M6KFWa 道はいろいろあると思うが、せっかくあるんだから構造体使って皆くるんじゃえと思うよ。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/383
384: デフォルトの名無しさん (アウアウウー Sabb-vI8p) [] 2019/05/05(日) 00:20:41 ID:nwgMKC8Ra 微妙にスレチのように思うので続きはJava初心者のスレでやった方が良いのではないか? まあ人に聞かなくても Java を勉強して Java の API のソースを読めばそういうのをどうしているのかは何れわかると思うけどね。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/384
385: デフォルトの名無しさん (ワッチョイ e22c-4xtZ) [sage] 2019/05/05(日) 00:21:53 ID:tvdtPjB+0 Ruby での、Jaggy 配列は、 ary = [ ] # 配列の配列 ary.push [ "a" ] ary.push [ 1, 2 ] p ary #=> [["a"], [1, 2]] C/C++ 以外のたいていの言語では、数字などのprimitive 以外は、すべて参照。 (primitiveは参照にするよりも、その場所へ値を埋め込んだ方が速い) 外側の配列は、内側の配列の参照を持っている。 内側の配列は、(primitive以外の)各要素の参照を持っている primitive以外は、コピーしても参照がコピーさ
れるだけで、値はコピーされない。 つまり、同一インスタンスを指す。 別のインスタンスは作られない new されていなければ、インスタンスは作られない。 代入しただけでは、参照がコピーされるだけ これを、shallow copy (浅いコピー)と呼ぶ(同一インスタンス)。 new して、別のインスタンスを作ることを、deep copy (深いコピー)と呼ぶ(別のインスタンス) http://mevius.5ch.net/test/read.cgi/tech/1554171817/385
386: デフォルトの名無しさん (ワッチョイ 8252-M0pk) [sage] 2019/05/05(日) 00:37:14 ID:RPhfdkos0 >>385 馬鹿は消えろ http://mevius.5ch.net/test/read.cgi/tech/1554171817/386
387: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 08:54:51 ID:3EWrT4Pn0 >>378 それは無駄な代入が発生するでしょう? http://mevius.5ch.net/test/read.cgi/tech/1554171817/387
388: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 09:01:10 ID:3EWrT4Pn0 >>380 余裕で三重ポインタなどほいほいと使いますよ https://mevius.5ch.net/test/read.cgi/tech/1434079972/26 void prep_exe(char *sttp, char **path, char ***argv) char **argv を使うことが理解できるのだったら「argv のアドレスを渡す」みたいな場合に渡された関数側では三重ポインタを使うことになるでしょう http://mevius.5ch.net/test/read.cgi/tech/1554171817/388
389: デフォルトの名無しさん (ワッチョイ 9b6d-ahOC) [sage] 2019/05/05(日) 09:04:36 ID:hoO1o10+0 >>388 それcodepadだろ? 使いさえすればいいって話じゃなくて http://mevius.5ch.net/test/read.cgi/tech/1554171817/389
390: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 09:08:14 ID:3EWrT4Pn0 >>389 無論使いさえすればいい、というわけではなく、この例では小さなシェルを実装しており、シェルのパイプ機能を実装するのに三重ポインタを使ったのです http://mevius.5ch.net/test/read.cgi/tech/1554171817/390
391: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 09:21:39 ID:2T/oydys0 >>387 引数を介すと代入が減るってこと? http://mevius.5ch.net/test/read.cgi/tech/1554171817/391
392: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 09:47:47 ID:3EWrT4Pn0 >>391 代入命令が増えるという意味ではなく、「同じ値」なのに代入してしまう、という作業が >>378「戻り値でポインタを返」す方式の書き方だと不可避です http://mevius.5ch.net/test/read.cgi/tech/1554171817/392
393: デフォルトの名無しさん (ワッチョイ f701-EPtf) [sage] 2019/05/05(日) 10:05:07 ID:bV6goPu10 呼び出しの前後で、ptrの値が 同じかもしれない、場合よっては変わるかもしれない関数 ptr = func1(ptr, opt); と func2(&ptr, opt); うーんどっちも使うな… http://mevius.5ch.net/test/read.cgi/tech/1554171817/393
394: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 10:28:11 ID:2T/oydys0 >>392 じゃあ、一時変数に代入しとけば? http://mevius.5ch.net/test/read.cgi/tech/1554171817/394
395: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 10:29:23 ID:3EWrT4Pn0 >>393 前者 >ptr = func1(ptr, opt); は初心者用で、>>392 のいう無駄な代入が含まれています、二重ポインタがわかるのなら後者にするべきです http://mevius.5ch.net/test/read.cgi/tech/1554171817/395
396: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 10:30:14 ID:3EWrT4Pn0 >>394 シンプルな記述ができるのに、わざと複雑な書き方にするのは問題なのでは? http://mevius.5ch.net/test/read.cgi/tech/1554171817/396
397: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 10:32:32 ID:2T/oydys0 >>396 じゃあ、戻り値そのまま使えば? mallocは使うんでしょ? http://mevius.5ch.net/test/read.cgi/tech/1554171817/397
398: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 10:33:46 ID:3EWrT4Pn0 >>397 その場合無駄な代入が発生しますね、>>393 がいい例を示しています http://mevius.5ch.net/test/read.cgi/tech/1554171817/398
399: デフォルトの名無しさん (ワッチョイ f701-EPtf) [sage] 2019/05/05(日) 10:35:01 ID:bV6goPu10 エラー伝達に NULL を使う realloc は即代入するとお漏らししちゃうし あれ、なん引数書き戻しにしなかったんだろう? 素朴な疑問 http://mevius.5ch.net/test/read.cgi/tech/1554171817/399
400: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 10:35:57 ID:2T/oydys0 >>398 代入されているのかされていないのか、わからない方が良いってこと? http://mevius.5ch.net/test/read.cgi/tech/1554171817/400
401: デフォルトの名無しさん (ワッチョイ f701-EPtf) [sage] 2019/05/05(日) 10:36:08 ID:bV6goPu10 ×あれ、なん引数書き戻しに ○あれ、なんで引数書き戻しに http://mevius.5ch.net/test/read.cgi/tech/1554171817/401
402: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 10:41:29 ID:2T/oydys0 >>399 正直、nullが来た時点で終わってるしなあ…。 まあでも一時変数使うのが筋だと思いますよ。戻り値でも引数でも同じこと。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/402
403: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 11:25:51 ID:3EWrT4Pn0 >>400 ちがいます 代入するのか代入しないのかは malloc() したかしなかったかにかかっています。 代入は malloc() したとききだけにすればよく それが >>393 の func2(&ptr, opt); の書き方 一方 >>393 ptr = func1(ptr, opt); は malloc() したかしないかにかかわらず代入を行います、これは無駄な代入を含みます http://mevius.5ch.net/test/read.cgi/tech/1554171817/403
404: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 11:31:24 ID:2T/oydys0 >>403 だから、関数の内部的に何してるのかわからんのが良いってことじゃない? http://mevius.5ch.net/test/read.cgi/tech/1554171817/404
405: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 11:37:36 ID:3EWrT4Pn0 >>404 着目点はそこにはありません。関数による記述で内部を隠蔽するのが目的ではありません 問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…?、にかかっており >>393 ptr = func1(ptr, opt); は?を記述できる可能性が皆無、一方 >>393 func2(&ptr, opt); は?を記述できる可能性がある、というわけです http://mevius.5ch.net/test/read.cgi/tech/1554171817/405
406: デフォルトの名無しさん (スプッッ Sd22-ph/v) [sage] 2019/05/05(日) 11:38:01 ID:orE8GGyod >>393 前者の方が好ましい 2重ポインタなんて最適化の妨げになるものは、それしか使えない場面でのみ使うべき http://mevius.5ch.net/test/read.cgi/tech/1554171817/406
407: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 11:44:46 ID:3EWrT4Pn0 >>406 非常に大きな二分木(ノートが1億個)があって、そのはるか先端で malloc() してそこで代入すればいいだけなのに、 その先端から root に戻ってくる途中の30箇所ほどで、軒並み全部のノードで「必要のない無駄な代入」をするのですか? >それしか使えない場面でのみ使うべき この二分木を実装する、というのがまさしく「それしか使えない場面」なのですよ http://mevius.5ch.net/test/read.cgi/tech/1554171817/407
408: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 11:45:42 ID:2T/oydys0 >>405 つまり、後者でmallocしてnullが返った時はそれを代入するってことですか?同じじゃん。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/408
409: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 11:47:06 ID:2T/oydys0 >>407 二分木のコストってのは比較であって代入じゃないと思いますよ。 まあアルゴリズムの一般論としては。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/409
410: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 11:53:15 ID:3EWrT4Pn0 >>408 >>393 func2(&ptr, opt); では malloc() して null が返ってきたときは、例えば何もしない、ということはできますね でも >>393 ptr = func1(ptr, opt); は、malloc() しようがしまいが代入してしまいますね、これは「やる必要のない無駄な代入」が含まれることになり、好ましくないです >>393 ptr = func1(ptr, opt); の記述法は二分木を最初に習うときに、この記述法で理解を促すという意味では有用であっても、 いつま
でもこれで書いているようでは進歩していない、もっといえば怠惰である、と考えています http://mevius.5ch.net/test/read.cgi/tech/1554171817/410
411: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 11:55:53 ID:3EWrT4Pn0 >>409 しかし無駄な代入を放置してよいというわけではないでしょうね、削れるところは削るべきです 単純二分木よりさらに改良された平衡二分木(AVL木、赤黒木等)を紹介する書籍では、最初から >>393 func2(&ptr, opt); で記述されていますよ http://mevius.5ch.net/test/read.cgi/tech/1554171817/411
412: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 11:57:28 ID:2T/oydys0 >>410 じゃあ隠蔽しろという話なんじゃないの? 関数の中で成功失敗を判定して外にnullは返すな入力時のままにしとけ、という関数。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/412
413: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 11:58:36 ID:2T/oydys0 >>411 代入回数比較してよ。頼むよ。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/413
414: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 12:05:45 ID:3EWrT4Pn0 >>412 ちがいますね 問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…?、にかかっています。 >>413 >>407 に書いておきました、1億ノードの二分木にて各ノードが最適に配置されているとして、削ることのできる代入は malloc() 一回に対して 30 個の代入になります >>393 ptr = func1(ptr, opt); では 1億ノードの二分木にノードを追加する際、30個の無駄な代入が発
生します 代入のコストは大したことがない、にしても、アルゴリズムを正確に記述できないのは問題ですね 洗練された記述とはそういうものではないでしょうか http://mevius.5ch.net/test/read.cgi/tech/1554171817/414
415: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 12:48:51 ID:2T/oydys0 >>414 いや、mallocがnull返した時はいれないんでしょ? 成功か失敗かじゃないの?呼んだかどうかじゃなくて。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/415
416: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 12:52:54 ID:2T/oydys0 仕事では戻り値に成功失敗が入ってオブジェクトのポインタは引数に来るような関数は使うけどさ、 結局どっちもチェックするよ。信じられねえもんな。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/416
417: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 13:12:30 ID:3EWrT4Pn0 >>415 malloc() が成功したか失敗したかは、今の話には関係ありません 今関係があるのは、 malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…? です http://mevius.5ch.net/test/read.cgi/tech/1554171817/417
418: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 13:42:25 ID:2T/oydys0 >>417 じゃあ、絶対代入するってことだろうよ。 引数に渡したポインタに。ポインタを。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/418
419: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 13:51:49 ID:3EWrT4Pn0 >>418 malloc() したときは代入しますよ、でも malloc() しないときは代入なんかせず、そのまま呼び出し元に返るだけです それが>>393 ptr = func1(ptr, opt); 方式と絶対的に違うのです http://mevius.5ch.net/test/read.cgi/tech/1554171817/419
420: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 13:55:35 ID:2T/oydys0 >>419 戻り値はvoidってこと? http://mevius.5ch.net/test/read.cgi/tech/1554171817/420
421: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 14:02:45 ID:3EWrT4Pn0 >>420 >>393 func2(&ptr, opt); 式なら void もありえます http://mevius.5ch.net/test/read.cgi/tech/1554171817/421
422: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/05(日) 14:08:06 ID:2T/oydys0 >>421 いや、必須なのでは? http://mevius.5ch.net/test/read.cgi/tech/1554171817/422
423: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 14:11:38 ID:3EWrT4Pn0 >>422 いいえ、実際に実装するならば、エラーを伝達する手段として返り値を準備することは大いにありえるでしょうね void が必須ではありません 必要な代入なら使えばいい、でも >>393 ptr = func1(ptr, opt); 方式は不必要な代入があり、単に二重ポインタを使用して記述すればこれは除去できるので、 >>393 ptr = func1(ptr, opt); を書くのは問題だし、これを書く人は頭を使っていない、と判断します http://mevius.5ch.net/test/read.cgi/
tech/1554171817/423
424: デフォルトの名無しさん (ワッチョイ f701-EPtf) [sage] 2019/05/05(日) 14:33:08 ID:bV6goPu10 異常は戻りをNULLにするパティーンで node_t *func3(node_t**, ...) 正常だった場合に ptr = func3(&ptr, opt); と書けるしw (無駄な努力の可能性 http://mevius.5ch.net/test/read.cgi/tech/1554171817/424
425: デフォルトの名無しさん (ワッチョイ f701-EPtf) [sage] 2019/05/05(日) 14:34:34 ID:bV6goPu10 って書いたけど鼻から悪魔踏みそうな嫌らしさがあるな… http://mevius.5ch.net/test/read.cgi/tech/1554171817/425
426: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 15:03:58 ID:3EWrT4Pn0 >>424 そのパターンでは、異常値 NULL をうっかりノードに登録してしまうと、そのノードより下が浮いてしまい危ないですね、ま、異常系をミスったままリリースしてしまうことも私はよくやりますけど http://mevius.5ch.net/test/read.cgi/tech/1554171817/426
427: デフォルトの名無しさん (アウアウカー Sa47-3iRC) [sage] 2019/05/05(日) 15:42:24 ID:8x8syc+Fa >>423 いや、必須でしょ?代入消せるんだから。消さないと。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/427
428: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 17:54:28 ID:3EWrT4Pn0 >>427 言葉尻を捕らえて攻めたつもりになっているようですね 「すべての代入を消去できる」なんていってませんよね >>393 ptr = func1(ptr, opt); この代入は不要な代入を含むので、 >>393 ptr = func1(ptr, opt); は不適当な書き方だ、とこれまで首尾一貫して述べているのです http://mevius.5ch.net/test/read.cgi/tech/1554171817/428
429: デフォルトの名無しさん (ワッチョイ f701-EPtf) [sage] 2019/05/05(日) 18:13:23 ID:bV6goPu10 423の文意は 「void が必須なわけではなく 引数と同じ型のポインタを戻すことはせずに、別の目的の何か、たとえばエラーコードとして int を戻す なんてのはアリでしょ?」 ってことだと思うけど http://mevius.5ch.net/test/read.cgi/tech/1554171817/429
430: デフォルトの名無しさん (アウアウエー Sa3a-3iRC) [sage] 2019/05/05(日) 18:42:49 ID:dOx23ziba returnしちゃだめでしょ 代入が駄目ってくらいだから http://mevius.5ch.net/test/read.cgi/tech/1554171817/430
431: デフォルトの名無しさん (ワッチョイ f701-EPtf) [sage] 2019/05/05(日) 18:56:43 ID:bV6goPu10 「代入不要なケースでも代入記述を要求するのはよろしくない」スタイルの延長だと 戻り値評価も破棄可能ならそうすべき って話か http://mevius.5ch.net/test/read.cgi/tech/1554171817/431
432: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 19:00:00 ID:3EWrT4Pn0 >>430 どんな代入もだめだとは主張していませんね… >>393 ptr = func1(ptr, opt); 方式は不必要な代入があり、単に二重ポインタを使用して記述すればこれは除去できるので、 >>393 ptr = func1(ptr, opt); の代入が駄目だとはいってきていますけれども http://mevius.5ch.net/test/read.cgi/tech/1554171817/432
433: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) [sage] 2019/05/05(日) 19:03:30 ID:TxpPZKKr0 >>407 http://mevius.5ch.net/test/read.cgi/tech/1554171817/433
434: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) [sage] 2019/05/05(日) 19:13:46 ID:TxpPZKKr0 あ、ごめん、ミスって文章を書く前に投稿してもうた。 >>407 あらためて確認するが、この代入を「無駄」としているのはアルゴリズムの表現の上では不要なことをしているという 意味の上での無駄であって、性能上の無駄という意味ではないんだね? そして、アルゴリズムを正しく表現する上では (ときには二重・三重のも含めて) ポインタが必要だと。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/434
435: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 20:16:09 ID:3EWrT4Pn0 >>434 >性能上の無駄という意味ではないんだね? 性能の上で分析するとなると、間接参照にてデータをロード、ストアするコストと値をストアするコストを天秤にかける、ことになりますね なるほど、その点を言いたくて、でも言いたくなくて、しつこく絡んでいたのですか… 私は二重ポインタでの表現の方がトータルでお得だ、とは思ってはいますが、これまで表に出ている私の発言は、あえてそこには踏み込まず(だって性能の話はうかつに断言できませんか
らね…)、 おっしゃるとおり「アルゴリズムの表現の上では不要なことをしている」に留まっています http://mevius.5ch.net/test/read.cgi/tech/1554171817/435
436: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) [sage] 2019/05/05(日) 20:57:45 ID:TxpPZKKr0 >>435 たとえば数学上の表記なら「A=1 であり B=1 のとき A=B は真である」と「1=1 は真である」には何も差が無い。 途中で名前を付けるのは人間に対する便宜であって、無駄な「操作」は存在しない。 代入が無駄たりうるのは C のパラダイムだからなので、 「C で表現するにはポインタが必要だし、代入では不適当だ」は事実であっても 「ポインタが無い言語では表現できない」というわけではないよ。 C の低級な世界でまともな意味論を表現
しようとするのがそもそもの間違いだろう。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/436
437: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) [sage] 2019/05/05(日) 21:02:18 ID:3EWrT4Pn0 >>436 >「ポインタが無い言語では表現できない」というわけではないよ。 それは理解しています、なぜなら Java での二分木の実装を検討したことがある(探せば2ch過去ログにあるかもしれません) Java にはポインタはありませんが、実装できるかできないか、といえば「できる」の方に入りますね http://mevius.5ch.net/test/read.cgi/tech/1554171817/437
438: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) [sage] 2019/05/05(日) 21:54:26 ID:TxpPZKKr0 >>437 そこまでわかっているのなら、 「代入しない」と「同じ値を代入しなおす」が意味論的に等しいということがどうしてわからないんだ。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/438
439: デフォルトの名無しさん (ワッチョイ 2f05-S4IJ) [] 2019/05/05(日) 23:34:40 ID:RXFRr1FQ0 C言語のプログラム内で確保していいメモリってユーザー空間の仮想メモリ上限いっぱいまで取っていいの? 複数の変数a, b, c, ・・・の値を表示するだけのプログラムを時系列に並べて考えてみるんだけど 0. 実行ファイルを起動する 1. 32bitプロセスが生成される ←たとえば32bit windowsだとユーザー空間とカーネル空間で計4GBの仮想メモリが確保される 2. int a; ←仮想メモリ(1で確保されたユーザー空間)上にaが確保される int b; ←上に類似 int c;
←上に類似 ・・・・・(複数の変数の宣言やprintf関数が続く) こんな感じなんだろうけど 上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの? http://mevius.5ch.net/test/read.cgi/tech/1554171817/439
440: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) [sage] 2019/05/05(日) 23:38:14 ID:TxpPZKKr0 >>439 いいけど、もっと効率的な方法があるならそれに越したことは無いっていうそれだけの話 http://mevius.5ch.net/test/read.cgi/tech/1554171817/440
441: デフォルトの名無しさん (ワッチョイ 2f05-S4IJ) [] 2019/05/05(日) 23:41:29 ID:RXFRr1FQ0 簡潔に書くと 安全のためにはどこまでメモリを使っていいの? そのメモリの大きさはユーザー空間の上限と同じなの? という室問なのに長くなってしまた http://mevius.5ch.net/test/read.cgi/tech/1554171817/441
442: デフォルトの名無しさん (ワッチョイ 2f05-S4IJ) [] 2019/05/05(日) 23:47:50 ID:RXFRr1FQ0 >>440 ありがとう ただ初心者なので効率性を目指すにはきつい部分が出てくる そうなるとメモリの残量を監視する、つまり残量の値を取得する必要があるわけだけど これは一般的にはwindowsのAPIを使うのが普通なの? (そんなものがあるのかは知らない) http://mevius.5ch.net/test/read.cgi/tech/1554171817/442
443: デフォルトの名無しさん (ワッチョイ 8252-M0pk) [sage] 2019/05/05(日) 23:52:54 ID:RPhfdkos0 >>442 スタックとヒープという概念は知ってる?知らなければまずそれを調べてみて。 それと、初心者なら効率を求める前に正しくメモリ管理を扱えるようになる必要があるが、その時点で残量は気にする必要はないぞ。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/443
444: デフォルトの名無しさん (ワッチョイ 2f05-S4IJ) [] 2019/05/05(日) 23:59:16 ID:RXFRr1FQ0 FIFOだとかナントカ程度にしか。 「〜〜領域」という幾つかの用語がOSとかの環境が違っても 全く共通のものなのかよく分からないから正直スルーしてる http://mevius.5ch.net/test/read.cgi/tech/1554171817/444
445: デフォルトの名無しさん (ワッチョイ e22c-4xtZ) [sage] 2019/05/06(月) 05:38:27 ID:wr9bFPpT0 >>414 >1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します 2^10 = 約1,000 千 2^20 = 約1,000,000 百万 2^30 = 約1,000,000,000 十億 >>441 Java VM の初期値は、256MB とか。 それよりも大きいと強制終了されるが、起動時に、512MBに設定できる たぶん、4GB の仮想メモリでも、ユーザー空間3GB・カーネル空間1GBぐらいだろ それ以上のデータは、動画みたいにstream になる。 バッファサイズ、例えば、1MB を読ん
では捨てて、次の1MB読んでは捨てて、の繰り返し 読み込んだデータを使ったら、すぐに捨てないといけない。 ユーザー空間に、空きを作らないといけない http://mevius.5ch.net/test/read.cgi/tech/1554171817/445
446: デフォルトの名無しさん (ワッチョイ 8252-M0pk) [sage] 2019/05/06(月) 06:20:53 ID:Geq8Gq1G0 >>445 いつものRubyバカだろ。いい加減な知識でC言語のメモリの話題に口を挟むのはやめろ。この板になれている者からすれば「またいつものか...」ですむが、初心者にとっては害悪でしかないから消えろ。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/446
447: デフォルトの名無しさん (ワッチョイ 8252-M0pk) [sage] 2019/05/06(月) 06:25:32 ID:Geq8Gq1G0 >>444 組み込みとかの特殊な環境では例外もあるけど、基本的には環境によらずC言語で必須の概念だからスルーせずにちゃんと調べるべき。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/447
448: デフォルトの名無しさん (ワッチョイ 06d2-R0y6) [sage] 2019/05/06(月) 08:39:59 ID:s1ulBxFy0 >439 >上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの? 他のプロセスがスワップ起こして重くなるから止めろって言いたい。 http://mevius.5ch.net/test/read.cgi/tech/1554171817/448
449: デフォルトの名無しさん (ワッチョイ 2f05-73UM) [] 2019/05/06(月) 10:14:49 ID:Om5TJBQR0 >>447 うん調べてみるよ ありがとう >>448 そんな視点もあるのか 他のプロセスも考慮しないといけない 思ったよりも数段以上やっかいだな http://mevius.5ch.net/test/read.cgi/tech/1554171817/449
450: デフォルトの名無しさん (ワッチョイ 2f05-73UM) [] 2019/05/06(月) 10:19:59 ID:Om5TJBQR0 >読み込んだデータを使ったら、すぐに捨てないといけない データをガンガン読み込んでいくようなプログラムだと「使ったらすぐ捨てる」のが鉄則か http://mevius.5ch.net/test/read.cgi/tech/1554171817/450
451: デフォルトの名無しさん (ワッチョイ d701-LHRJ) [sage] 2019/05/06(月) 10:40:24 ID:F7BEaxMm0 >>439 ユーザープロセスなのでカーネル空間はマッピングされないよ。プロセス管理のための領域はカーネル空間に多少は確保されるとは思うけど、それはユーザープロセス用ではないし。 ページサイズの関係で効率的に確保できるかどうかは別問題だけど仮想メモリ領域いっぱいまで取れるか否かと言えば取ることはできる。 実際にそんなことしたらスワップ発生しまくりでまともに動かないとは思うけど。 http://mevius.5ch.net/test/read.cgi/tech/15
54171817/451
452: デフォルトの名無しさん (ワッチョイ 7fe9-3iRC) [sage] 2019/05/06(月) 12:43:21 ID:53K/0wkW0 実装としてはだいたいcopy on writeだから、確保だけだったら特に問題発生しないよ http://mevius.5ch.net/test/read.cgi/tech/1554171817/452
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 550 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.029s