1 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 11:40:35 ] C言語の入門者向け解説スレです。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題を片付けます 115代目 pc11.2ch.net/test/read.cgi/tech/1217741118/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 35 pc11.2ch.net/test/read.cgi/tech/1219761846/ 過去スレ 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
369 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 22:59:50 ] >>367 イメージとして数直線があるとき
370 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 23:01:03 ] 0 < hoge && hoge < 10 なんかだと数学の書き方にちょっと似る
371 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 23:08:13 ] もう何年も>演算子を使っていない
372 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 23:09:49 ] >>370 0 ≦ hoge ≦ 10 みたいな書き方からの連想だよね。
373 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 23:10:10 ] >>371 よう俺
374 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 23:12:44 ] >>368 自分は代入演算子と間違えないためかと思ってました >>369 なるほど〜 数直線なんて単語すっかり忘れてました >>370 そういう使い方もあるのですね とても参考になりました ありがとうございます
375 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 02:25:39 ] int配列で hoge[] = {1,2,3,4} みたいな物を 1234と連結させたint型に直したい時に なにか賢い方法ありますか?
376 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 02:27:34 ] >>375 1234と連結させたint型とはなんですか? 10進数の1234ですか。
377 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 02:28:14 ] ごめんなさい、そうです
378 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 02:34:06 ] for(i=0,n=0;i<hogelen;i++) n=10*n+hoge[i];
379 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 08:17:06 ] 標準ライブラリの関数ってどのぐらい早いの?
380 名前:デフォルトの名無しさん [2008/09/28(日) 08:47:23 ] Windowsで、system("test.exe")と実行ファイルを呼び出したとき、 test.exeはどのパスにあるか調べる方法はありますか?
381 名前:デフォルトの名無しさん [2008/09/28(日) 08:50:53 ] もしくは、test.exeが利用可能か調べる方法でも良いです。
382 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 08:58:32 ] >>380 つmain
383 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 09:01:41 ] >>379 例えばmemcpyはバイト数指定なのに32bit単位でコピーして端数処理もやってるのもあるから、そこそこ速い
384 名前:デフォルトの名無しさん [2008/09/28(日) 09:02:59 ] >>382 もうちょい教えてください。やり方判りません
385 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 09:40:52 ] >>382 じゃないけどargc、argvを貰えと言ってるんだと思う
386 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 09:43:21 ] 二次元配列を別の関数へ渡す時 なぜこの方法で渡せるのかわかりません。 [2][2]で受け渡したいです。 void func(int array[][2]); //関数宣言 void mainf(){ int array[2][2]={1,2, 3,4}; func(array) } void func(int array[][2]){ }
387 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 10:01:23 ] [2][2]でも渡せる。 なぜ[][2]で渡せるかは配列の構造を調べてみるべし
388 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 10:05:12 ] >>387 配列は 最初のアドレスとデータ型さえわかれば 次の番地がわかるってことですか? そんでNULLまでが範囲ってことですか? 2次元だと添字情報がないと 次の番地がわからないので 書かなきゃいけないってことですね? 日本語でちゃんと説明できませんが なんとなくわかりました。
389 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 10:11:02 ] >>388 ただし、範囲のチェックはやってない。
390 名前:マジレスチュウ ◆MaJi/01g.w mailto:sage [2008/09/28(日) 11:49:54 BE:418780962-2BP(100)] >>380 環境変数のPATHのディレクトリを順に参照していってtest.exeを探していくんじゃダメ? なかったら最後にカレントディレクトリ調べて、それでもなければ利用不可能って事になる。
391 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 11:57:31 ] >>390 カレントディレクトリは一番最初でしょう。
392 名前:マジレスチュウ ◆MaJi/01g.w mailto:sage [2008/09/28(日) 12:34:20 BE:1710022177-2BP(100)] 内部コマンド → カレントディレクトリ → PATHに記述されたディレクトリ の順番か。ごめんなさい><
393 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 12:42:25 ] 違うだろ
394 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 13:19:25 ] 環境による
395 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 13:21:16 ] windowsの話してるんだろ
396 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 13:44:40 ] というかC関係ないね
397 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 15:12:09 ] だよな
398 名前:くさかべ様 [2008/09/28(日) 16:44:19 ] まあ俺に聞けばなんでもわかる、mixiでもIRCでも俺が相手になってやる。
399 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 16:48:57 ] 豆でも食ってろ
400 名前:デフォルトの名無しさん [2008/09/28(日) 18:18:09 ] すみません。友達にEclipseっていうののコンパイラだと何も設定しなくても 使えるときいたのですが、本当ですか? 以前、ボーランドという会社のコンパイラを使おうと思ったのですが うまくいかなかったので。。 もし、なにも設定しなくてもいいなら、つかってみたいんですが。 よろしくお願いします。
401 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 18:21:46 ] Eclipseはコンパイラじゃないよ
402 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 18:23:06 ] >>400 なにも設定したくないならvisualstudioおすすめ
403 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 18:26:45 ] PCの基礎知識が無いのにプログラミングは早すぎる
404 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 18:38:19 ] パスも通せないでプログラムですか
405 名前:400 mailto:sage [2008/09/28(日) 18:40:10 ] みなさん、ありがとうございます。やはり、私には無理みたいですね。 一度プログラムというのをやってみたいと思っていたのです。 visualstudioでググってみましたら、ただらしいですね。そいつでやってみます。 このいたの上にも情報があるみたいですね。ありがとうございました。
406 名前:デフォルトの名無しさん [2008/09/28(日) 19:24:39 ] >>405 がんがれノシ
407 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 19:31:03 ] >>405 まあ、これで覚えろ きっかけが無いと覚えれないしな。
408 名前:デフォルトの名無しさん [2008/09/28(日) 22:19:16 ] main関数の2番目の引数の char *argv[] って、argv[]っていう配列へのぽちんたという意味なのか、 ぽちんた変数配列argvっていう意味なのかどっちなの? 教えてエロイ人。
409 名前:408 [2008/09/28(日) 22:20:06 ] まちがえた。 ぽちんた変数配列argvっていう意味 ↓ ぽちんた変数の配列argvっていう意味
410 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 22:25:00 ] char *argv[]っていう書式的にはぽちんた変数の配列argv っていう意味で合ってる でも実際はchar **argvだけど
411 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 22:26:37 ] ぽちんた変数と呼ぶのが今の流行りなのか?
412 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 22:34:33 ] 幼稚な奴にあわせる必要は無い
413 名前:408 mailto:sage [2008/09/28(日) 22:56:14 ] みんなどうもありがとう。ぽちんた変数の配列argvっていう意味なんだね。 細かいところがむずかしいね。ありがとう。よくわかったよ。
414 名前:デフォルトの名無しさん [2008/09/28(日) 23:05:44 ] ぽちんた言いたいだけやろ
415 名前:デフォルトの名無しさん [2008/09/28(日) 23:26:54 ] fgetsでstdinから文字を取得します。改行文字まで取得してしまうそうですが、 改行文字をなくしたいです。どうすればいいですか?
416 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 23:28:23 ] >>415 最後の改行文字をヌル文字に書き換える
417 名前:416 [2008/09/28(日) 23:39:06 ] なるほど、感涙。ありがとうございました。>>416
418 名前:デフォルトの名無しさん [2008/09/29(月) 01:29:14 ] ある本を本でいたら(1990年くらいの本)、文字列はこう表現しますなんて記述で *str = "abcde"; ってかいてあったんだ。でも今の本はたいてい char str[80] = "abcde"ってかいてある。 最初の本のことが頭にあったから、char *str1=""; *str2="";と宣言してそれにgetsで読み込ませたら str1のあとに必ずstr2の文字まで連結されて格納されてしまうんだけど、それはやっぱそういうことで stdinから読み込ませる文字列を格納するのは、ポインタでなく配列で宣言しなくちゃいけないわけなの? なんか、こないだ立ち読みしてた本でも文字列はポインタで表現みたいな事が強調してあったから 読み込ませる文字列もポインタに読み込ませればいいのかなとおもったんだけど。 すまそ。寝るのでお礼は明日になります。教えてくれる方、よろしくお願いします。
419 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 01:38:11 ] 結論から言うと全然違う おまえが無茶苦茶してるだけ 眠い上に長くなるから今説明しないけど
420 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 01:39:30 ] 結論だけ言うと、配列で宣言しなくちゃいけない
421 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 04:15:22 ] ファイルから13バイトのデータを読むために struct database { char boolen; long data[3]; }; このような構造体を作ってfreadで読み込んだのですが charのところで4バイト読み込み、最初の1バイトだけ変数に入れて3バイト破棄するという変な動作をします。 printf("%d\n",sizeof(struct database)); で表示させたところ16と表示されどうにもこうにもできません。 どうすればちゃんと1バイトだけ読み込むのか教えてください。お願いします。
422 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 04:42:34 ] >>421 構造体メンバのアライメント(バウンダリ)の問題だと思う。
423 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 04:45:07 ] そのコンパイラでは以下のようなアラインメントになっている *--- char boolean **** float data[1] **** float data[1] **** float data[2]
424 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 04:47:51 ] 1バイト読む->boolenに格納 4バイト読む->data[0]に格納 4バイト読む->data[1]に格納 4バイト読む->data[2]に格納 とすればおk
425 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 05:35:56 ] 1バイト読んでから再度freadで12バイト読まないとダメ
426 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 06:15:10 ] #pragma pack()とかパディングを無くす抜け道はある しかし>>424 ,425さんのように手間を惜しまない方が賢明
427 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 08:37:49 ] >>418 とりあえず、本は買って隅から隅まで読め
428 名前:421 mailto:sage [2008/09/29(月) 09:50:01 ] >>422-426 ありがとうございます。 コンパイラの仕様でそうなっているんですか。 やっぱり一気に読むより個別に読んだほうが確実ですね。
429 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 09:59:04 ] まあ個別に読むのもいいけど、アライメントについて調べておいたほうがいいよ。 書くときにも同じことやりそうだし。
430 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:05:10 ] >>421 union chinpo { char str1[13]; struct database { char boolen; long data[3]; }; ユニオン使って、srt1で一括読み込みすればいいですよ。
431 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:21:47 ] >>430 うそつくな
432 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:50:48 BE:556925928-2BP(40)] >>430 >>429
433 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 20:02:24 ] >>418 > でも今の本はたいてい char str[80] = "abcde"ってかいてある。 そんなことねーだろ。
434 名前:430 mailto:sage [2008/09/29(月) 22:28:12 ] カンで書いてみたけどやっぱダメかw ごめんねごめんね^^
435 名前:デフォルトの名無しさん [2008/09/29(月) 22:31:16 ] >>434 せめてやりとりぐらいは呼んでからレスしてね
436 名前:デフォルトの名無しさん [2008/09/29(月) 22:53:58 ] カタカナ表記のユニオンがいいな ユニックス的でいかすぜ
437 名前:418 mailto:sage [2008/09/30(火) 00:56:23 ] >>419-420 どうもありがとうございます。これからは、標準入力から入力する文字列は 必ず、配列で宣言するようにします><;ありがとうございました。
438 名前:デフォルトの名無しさん [2008/09/30(火) 00:57:38 ] すみません。グローバル変数とローカル変数を同じ名前にしてしまい、 printfで出力しようとおもったら、困りました。出力できませんかね?
439 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 00:58:06 ] 片方の名前を変えればおk
440 名前:438 mailto:sage [2008/09/30(火) 01:29:39 ] >>439 やはり無理みたいですね。ローカル変数の名前を変えます。ありがとうございました。
441 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 01:36:52 ] >>438 影響範囲が大きすぎて触るのが怖い場合は、グローバル変数にアクセスするための関数を作ればおk #include<stdio.h> int value=1234; char string[256]="this is global."; int *global_value(void){ return &value; } char *global_string(void){ return string; } int main(void) { int value=2345; char string[256]="this is local."; printf("value=%d\n", value); printf("string=%s\n", string); printf("value=%d\n", *global_value()); printf("string=%s\n", global_string()); return 0; }
442 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 08:42:43 ] グローバル変数ってあんま使わないほうがいいの? ゲーム作ろうとするとグローバルのほうが簡単に書けるような気がするんだけど
443 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 08:46:38 ] >>442 そのグローバル領域の使い方次第じゃないの? アクセス速度ばっかり追求しすぎて別ソースに書かれてる 領域へexternでアクセスしてればわかりにくいソースになるし。 速度は犠牲になるけど、別ソースで持ってる領域へアクセスする場合は アクセス用関数を用意して領域をいじるとかね。 あとは命名規則をしっかり作って、どこ管理の関数・領域かが 一目でわかるようにしてあればexternで触っても問題ないだろうし。
444 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 10:25:57 ] Insufficient memory(out of memory) in function cvalloc というエラーが出てプログラムがとまってしまいます。 これを防ぐにはどうしたらいいでしょうか。
445 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 10:31:17 ] >>444 メモリが足らない、と言ってる ・メモリを増やす ・メモリの使い方を見直して無駄遣いを減らすなり節約するなり
446 名前:デフォルトの名無しさん [2008/09/30(火) 17:25:04 ] >>442 そう思うなら、とことんやってみれ なんでダメなのかもわからん奴が教条主義的に嫌って書いたコードは おぬしのコードよりダメだぜ、きっと
447 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 17:50:35 ] void ChangeWtoM(char *malt, char *wide, int len_wide) { int i, j; for(i = 0, j = 0; i < len_wide*2; i++){ if(wide[i] != '\0') malt[j++] = wide[i]; } malt[j] = '\0'; } int main() { TCHAR wide[64] = L"testテストですtest"; char malt[64]; ChangeWtoM(malt, (char*)wide, lstrlen(wide)); printf("%s", malt); return 0; } ワイド文字文字列をマルチバイト文字列に変換する関数を作りたいのです。 いろいろ試してみたのですが上手く行きません。 これは何がいけないのでしょうか。
448 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 18:04:05 ] そもそもTCHAR型がなんなのか理解しているか
449 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 18:08:39 ] 突っ込みどころが多すぎる。 環境は?汎用的に作ると長くなるから特定したほうがいいかも。
450 名前:447 mailto:sage [2008/09/30(火) 18:10:13 ] 1文字に2バイト使うcharで1バイトしか要らない場合は'\0'が入ってる だと思っているんですけど
451 名前:447 mailto:sage [2008/09/30(火) 18:11:59 ] >>449 OSはWindowsXP、コンパイラはVisualC++2008です。
452 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 18:12:55 ] >>450 実際のワイド文字列とマルチバイト文字列を見比べてみ void p(char *p, int len) { int i; for (i = 0; i < len; i++) printf("%02x ", p[i] & 255); printf("\n"); } int main() { wchar_t *wide = L"testテストですtest"; char *mb = "testテストですtest"; p((char*) wide, wcslen(wide) * 2); p(mb, strlen(mb)); }
453 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 18:13:35 ] >>450 文字コードの種類を一度勉強したほうがいいよ。 どうせS-JIS、JIS,
454 名前:453 mailto:sage [2008/09/30(火) 18:14:21 ] 途中になった EUC,UTF系との相互変換とかくらいだろうし
455 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 18:17:02 ] Windowsなら、WideCharToMultiByte()APIがあるから、それ使うか、 VC++なら、CStringを使って、、、っとこれはC++だからスレ違いか。
456 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 18:21:52 ] >>452-455 ありがとうございます アドバイスを元にいろいろ調べてみます
457 名前:デフォルトの名無しさん [2008/09/30(火) 20:00:21 ] 関数ポインタの配列を使って、色々と作成してるんだけど、 たとえば int (*p[5])(int x, int y)っていう関数へのポインタ変数の配列pをつくったとする この配列に格納できる関数は戻り値がint型で、引数はint型を2つとる関数じゃないと だめみたいなんだけど、Cでは色んな型の戻り値や引数を持つ関数をたくさん収納できる 配列っていうのは、作成できないんですか?よくわからないけど、void型で宣言しておいてあとでキャストするとかしても 無理なんでしょうか?よろしくお願いしますm(_ _)m
458 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:19:38 ] ヒント:可変長引数
459 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:21:15 ] 可変長引数って配列にしてポインタ渡せばいいじゃんって思うんだけどなんでそんな機能があるの?
460 名前:デフォルトの名無しさん [2008/09/30(火) 20:21:44 ] >>457 0 <= n && n < 5 として int r = (*p[n])(ここを); どう書きたいんでい?
461 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:25:22 ] >>459 ヒント:printf()
462 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:35:11 ] 入出力以外になんか使い道あるの?
463 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:39:23 ] 関数ポインタで分岐させる関数それぞれが引数の形や戻りが違うようにしたいのであれば 構造体を連絡用にしてその構造体のポインタ1個だけを引数にする関数にしてしまえばいい。 あとは構造体全体を共用体にでもして引数が変わる関数分用意すればいい。
464 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:40:47 ] printfは第二引数が可変長になってるから printf("a=%d b=%d",a,b); って使い方ができるだろ
465 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 21:02:50 ] >457 ちなみに戻り値も引数もバラバラな関数群へのポインタを 配列に格納したいというのは、どういったシチュエーション? >460 が指摘しているように call するときの手間を考えたら メリットなさげ
466 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 21:34:52 ] すいません。どこで聞いたらよいか分かりませんので、ここで質問させて頂きます。 *エンディアン、MSB/LSBファースト、インテル、モトローラ, 送信値の関係 Big Endian = Motorola = メモリ番地0にMSB = MSBファースト Little Endian = Intel = メモリ番地0にLSB=LSBファースト とまでは分かっています。 仮に、10進数60000を0- 1byte(2byte)使い、送信するとします。 60000(10進)=>EA60(16進) MSB = 0 byte LSB=7byteで定義し、ビッグエンディアンで送信するとき、 バイトの並びはどちらが正しいでしょうか? @ EA 60 00 00 00 00 00 00 A 60 EA 00 00 00 00 00 00 byte 0 1 2 3 4 5 6 7 MSB LSB あほですいません。ご教授お願い致します。
467 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 21:40:33 ] 32bit レジスタ上で 00 00 60 EA ビッグエンディアンだと 00 00 60 EA リトルエンディアンだと EA 60 00 00
468 名前:きもい [2008/09/30(火) 21:45:36 ] くさかべくさかべくさかべくさかべくさかべくさかべくさかべくさかべ くさかべくさかべくさかべくさかべくさかべくさかべくさかべくさかべ くさかべくさかべくさかべくさかべくさかべくさかべくさかべくさかべ くさかべくさかべくさかべくさかべくさかべくさかべくさかべくさかべ くさかべくさかべくさかべくさかべくさかべくさかべくさかべくさかべ くさかべくさかべくさかべくさかべくさかべくさかべくさかべくさかべ
469 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 21:46:16 ] >>466 意味が分からんよ long x=0x12345678; short y[2]={0x1234,0x5678}; ビッグエンディアン x : 12 34 56 78 y : 12 34 56 78 リトルエンディアン x : 78 56 34 12 y : 34 12 78 56 こうなる MSB = 0 byte LSB=7byteで定義したら >>466 の数値をビッグエンディアンで表現すると 00 00 00 00 00 00 EA 60 じゃないかな? > 0- 1byte(2byte)使い、 これでは定義と両立できない気がする
470 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:03:17 ] >>467 >>469 ご回答ありがとうございます。 Endianの問題はハードウェアに依存し、 MSB/LSBのバイト定義はソフトの問題だと認識してよろしいでしょうか? MSB=0byteのLittle Endian方式とMSB=7byteのBig Endianは結果的に 同じと理解してもよろしいでしょうか?
471 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:04:04 ] >>466 ソケット通信ならhtol関数、htolh関数を使えばいい。
472 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:07:13 ] >>471 すいません。プログラミングの素養は0なんです。
473 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:10:27 ] >>470 >MSB/LSBのバイト定義はソフトの問題だと認識してよろしいでしょうか? バイトオーダと型の大きさによる
474 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:13:12 ] >>470 言ってることが理解できん。 MSB=0byteってどういう意味なんだ。
475 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:15:09 ] bit?
476 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:16:10 ] >>474 0バイト目って意味じゃないかな 勿論マのいう 0 番目は一般人の 1 番目相当だがw
477 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:18:54 ] >>474 通常なら、32bit系の場合、 LSB=0 byte目、MSB=4byte目 なんでしょうけど、 これの定義が逆になっている製品があるんです。 スレ違いかもしれませんが、車載LAN (CAN)の話です。 基本的には、シリアル通信なので、この問題は同じかなと思ったのですが・・・
478 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:20:20 ] ↑ 訂正です。0ベースで書いてるので、MSB=3byte目ですね。
479 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:45:29 ] 速度的に問題が無ければテキストで送るという手もある。
480 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 23:06:24 ] >>477 ビッグエンディアンなら常に MSB=0byte目 LSB=(型のサイズ)-1byte目 リトルエンディアンなら常に LSB=0byte目 MSB=(型のサイズ)-1byte目
481 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 23:43:09 ] >>480 ご回答ありがとうございます。 実際に送信する順番という意味では、 ビッグエンディアン、リトルエンディアンにかかわりなく、 LSBが一番先という事になるのでしょうか? 60000(10進)、EA60は、ビッグエンディアン送信で 00 00 EA 60 --------> t つまりLSBファーストとなり 受信側ビッグエンディアンで読み出し(計算)はそのまま 0000EA60 として扱うという認識でよろしいでしょうか?
482 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 23:48:00 ] ネットワークスレのテンプレでも見てからそっち行けよ
483 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 23:48:57 ] >>482 わかりました。
484 名前:457 mailto:sage [2008/09/30(火) 23:49:06 ] どうも皆さん、色々書いていただきまして、ありがとうございます。 私は、関数ポインタ配列を覚えたててでして、おもしろいから色々と趣味で組んでいます。 ですから、仕事上どうしても必要とか出なくて。。 本当に色々な方に意見を書いていただきましてとても感謝しています。自分としては>>458 さんや >>463 さんが教えてくれた可変長引数と構造体&共用体を組み合わせて色々自作してみたいとおもいます。 このたびはありがとうございました。自分で色々と作成すると楽しいです。自分は趣味でやっているので。 色々とわかりだして今が一番楽しい時期です。ありがとうございました。
485 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 23:51:10 ] >>481 シリアル通信時のバイトオーダーをどちらかにきっちり決めておけばいい 例としてネットワークバイトオーダーはビッグエンディアンと決まっている
486 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 23:54:36 ] いや、0x0000EA60をビッグエンディアン送信で送信するなら、 0x00, 0x00, 0xEA, 0x60の順だろう。だからMSBが最初。
487 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 00:20:04 ] >>482 まだいます。すいません。 >>486 ありがとうございます。 ということは、 ビッグエンディアンはMSB(データの3 byte目)を最初に送信 リトルエンディアンはLSB(データの0 byte目)を最初に送信 ということですね? >>480 の内容と異なる気が・・・ 混乱してきました。もっと勉強します。
488 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 00:38:20 ] >>487 ここをみて勉強してください www.ertl.jp/~takayuki/readings/info/no05.html
489 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 00:44:37 ] >>488 ありがとうございます。
490 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 00:51:38 ] Intelだけなんだよな。リトルエディアンは。 なんでMS+Intelは、こういつもいつも
491 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 00:53:07 ] >>490 おいおいw
492 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 00:55:49 ] >>490 MIPSはどっちにでもできるぞ 現にPSPはリトルエンディアンだ。 アライメントはインテルのように甘くはないけど
493 名前:490 mailto:sage [2008/10/01(水) 00:58:27 ] >>492 そうか、知らんかった
494 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:06:11 ] SHシリーズにも動的に変えられるCPUあった気がするな 設計時はともかくプログラム的にはあまり気にしないけどさ
495 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 02:00:07 ] PPCがバイエンディアンだったよね。 エンディアン動作モードのビットがMSRに用意されてるとか >487 486の例で言えば、3バイト目の「60」はどうみてもLSBなんだが……
496 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 02:02:19 ] すみません質問です。 C言語でスタック領域からメモリを動的に取得する方法は何があるでしょうか? ネットで検索して探したところallocca()という標準?関数があるらしいのですが、 どんな仕様なのか分かっておりません。。
497 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 02:04:26 ] わかれ
498 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 02:12:39 ] なに?ヒープじゃ足りないの?組み込み?
499 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 02:14:13 ] >>496 alloccaは標準でなくて特殊な関数のようですが、あなたの環境にalloccaはありますか? そもそも、なぜmallocではいけないのでしょうか?スタック領域を使う理由は?
500 名前:デフォルトの名無しさん [2008/10/01(水) 02:33:24 ] スタック領域は無理だろ。 コンパイル時に決まった量を静的に確保するのが スタック領域だろ。 ヒープもスタックも同一のメモリを使う。
501 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 02:34:25 ] Cのスタック領域は基本的にリターンスタックだから、 関数を抜けると消えるし、注意して使わないと領域破壊して関数から戻れなくなる。 普通にmallocすべき
502 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 03:07:36 ] alloca()はfree()しなくていいから、楽だし安全。
503 名前:デフォルトの名無しさん [2008/10/01(水) 04:20:11 ] こちらで質問してよいものか…違ったら言ってください xdawinというソフトで逆コンパイルをしようと思いましたが エラー ufree: は malloc されていません とでました。そこで \アドレス\ void *malloc(size_t ○) と実行しましたが too many positional parameter とでてしまい、再度。結果、サイズが1でも0でもこれが出てしまいます ・エラーを処理しようと思った式が全然ダメ なのか ・サイズがおかしい のか誰か教えてください
504 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 04:30:29 ] これか↓ www.linux.or.jp/JM/html/LDP_man-pages/man3/alloca.3.html これを読むと、ナーバスな関数のような感じだな longjmpやsiglongjmpを使ったときにメモリの開放が簡単で、それ以外には 使用は推奨されていない。 と書かれている。
505 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 04:42:25 ] >>503 too many positional parameters ポジショナルパラメータの数が多すぎるというエラーです。 スクリプトを実行したときの、そのスクリプトに渡すのパラメータの数が あっていない可能性があります。 としか、お答えできません。
506 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 13:27:19 ] >503 スレ違いだと思う
507 名前:503 mailto:sage [2008/10/01(水) 13:35:16 ] >>505 ありがとうございます >>506 うーん、やはり… 逆コンパイルで探しても出てこなかったのですみませんでした
508 名前:デフォルトの名無しさん [2008/10/01(水) 19:20:41 ] while( 1 ) { // 真ん中 center = (left + right) / 2; printf("%d %d %d\n",center,left,right); // みつかったら if(a[center] == key){ printf("\nみつかった %d\n",center); printf("\n%d\n",a[center]); break; } // みつからなかったら if(left >= right) { printf("みつからなかった"); break; } if( a[center] < key ) left = center + 1; if( a[center] > key ) right = center - 1; // 時を止める getch(); } バイナリーサーチのプログラムこれでおk?
509 名前:デフォルトの名無しさん [2008/10/01(水) 19:23:00 ] 以前作ろうとして大失敗したから不安。 今回は成功したっぽいけど、間違えているかもしれないから修正あったら頼みます
510 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 19:30:51 ] おkにみえる
511 名前:デフォルトの名無しさん [2008/10/01(水) 19:35:55 ] なぜ bsearch を使わん?
512 名前:デフォルトの名無しさん [2008/10/01(水) 19:38:50 ] >>511 バイナリサーチを理解するため。
513 名前:デフォルトの名無しさん [2008/10/01(水) 20:02:46 ] >>509 プログラムが正しいかどうか、他人に聞くしかテスト技法を知らんのか テスト項目の導き方はいろいろある それが知りたければ便所の落書きより有料情報をあたったほうがいい
514 名前:デフォルトの名無しさん [2008/10/01(水) 20:15:04 ] >>513 分かった。
515 名前:デフォルトの名無しさん [2008/10/01(水) 20:34:11 ] floatのエンディアン変換が分からないのですが、教えてください。 typedef union { float f; unsigned char b[4]; } Endian32; float ConvertF32( void *inData ) { EndianF32 val; val.b[0] = ((Endian32 *)inData)->b[3]; val.b[1] = ((Endian32 *)inData)->b[2]; val.b[2] = ((Endian32 *)inData)->b[1]; val.b[3] = ((Endian32 *)inData)->b[0]; return val.f; } void test( float inVal ) { float ret = ConvertF32( &inVal ); fwrite( &ret, sizeof(float), 1, fp ); } こんな感じでやっています。 1.0を送ると、int型の1が何故か入ってしまいます。
516 名前:515続き [2008/10/01(水) 20:34:40 ] リトルエンディアンだとこうなっているので、 0011 1111 1000 0000 0000 0000 0000 0000 ビッグエンディアンにすればこうなるはずなんですが、 0000 0000 0000 0000 1000 0000 0011 1111 なぜか 0000 0000 0000 0000 0000 0000 0000 0001 こうなりますw 同じようなやり方で、intなど整数型は問題なく出来ています。 どこが間違っているんでしょうか?><
517 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 20:48:33 ] ループ変数に対して int main(void){ ... { int i, j; for(i...) for(j...) } ... { int i; for(i...) } ... return 0; } 見たいな感じでよく書くんだけど、これは機械のほうからすると無駄が多い処理なんでしょうか?
518 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 20:57:00 ] >515 そのシステムのエンディアンではない値をfloatとして返すのが間違い。 代入した直後に正規化されたりしてややこしいことになる。
519 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:13:07 ] >>515 代入というのは単にビット列をコピーすることではない 正しい内部表現を持たない値を実数として受け渡そうとしたら 場合によっては例外が送出されてプログラムが停まることもある >>517 コンパイラの最適化次第
520 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:16:41 ] 型のサイズを気にするのはコンパイルするまででおk?
521 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:23:41 ] 意味不明
522 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:40:26 ] >>515 void test( float inVal ) { EndianF32 ret = ConvertF32( &inVal ); fwrite( &ret, sizeof(float), 1, fp ); } とやれば、希望する結果が出るのではなかろうか。
523 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:54:51 ] >>520 コンパイルしてから何かを気にしたとして、それでどうするつもりだ
524 名前:デフォルトの名無しさん [2008/10/02(木) 00:57:10 ] いざ、リンクしてみたら、コンパイル済みのオブジェクトファイルが おかしな変数宣言しすぎてメモリ不足になるとか気にしてるのかな?
525 名前:デフォルトの名無しさん [2008/10/02(木) 01:02:05 ] そういう目に遭ったことがないのか? うらやましい
526 名前:デフォルトの名無しさん [2008/10/02(木) 01:05:07 ] メモリ不足解消するのなら、標準関数は変数へいったん代入するとだいぶ変わるらすい。
527 名前:デフォルトの名無しさん [2008/10/02(木) 01:17:56 ] int a = printf; a("imi wakaran");
528 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:32:04 ] int(*a)(const char*, ...) = printf; a("naniga kawarun daro");
529 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:34:13 ] >>527-528 え!そういう意味の代入なの?
530 名前:デフォルトの名無しさん [2008/10/02(木) 02:27:15 ] void_No4様がきましたよ。 俺は天才、そしてIQは400↑、すげーだろ
531 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 03:13:57 ] すごいね 俺の半分もあるじゃん
532 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 03:35:21 ] またメンサか
533 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:21:28 ] >>515 エンディアン云々以前に、ポインタを学んだほうが。 >val.b[0] = ((Endian32 *)inData)->b[3]; inData が指してるのは float (多分4バイトしかない) なわけだが。
534 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:05:06 ] >>533 union
535 名前:デフォルトの名無しさん [2008/10/02(木) 13:43:09 ] つmemrev
536 名前:515 mailto:sage [2008/10/02(木) 13:54:06 ] >>518 >>519 >>522 ありがとうございます。たいへんよく分かりました。 >>522 さんのやり方で上手く行きましたー! >>533 共用体を使うと、そういうことが出来ちゃうんです。
537 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 17:12:00 ] うにおんっていまいちクールなつかいかたがわからないよね
538 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 17:13:16 ] regs
539 名前:デフォルトの名無しさん [2008/10/02(木) 17:17:48 ] 企業秘密です
540 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:04:14 ] >>537 一つの領域を複数の型として使えることが共用体の意味だからそのように使えばいい 具体的にはサイズが同じ複数の型からなる配列などがある intとfloatが不定間隔で現れるようなフォーマットのデータを扱うときに便利
541 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:09:50 ] でもそれって値を取り出すときにintなのかfloatなのかわからなくない?
542 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:11:37 ] floatにキャストしちゃえ
543 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:23:33 ] >>541 そういうフォーマットは、たいてい先行するintの値によって その後いくつfloatが来るのか決まってる
544 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:34:42 ] たいていじゃなくて、規則性がなかったらどうするの?
545 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:39:36 ] 何も手がかりが無いのにそんなことしないわw
546 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:41:05 ] >>544 規則性がなかったら無理 そうじゃなくて、floatが先行してintが混ざる場合もあるという意味
547 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:39:40 ] 構造体のメモリ確保をしたいのですが、 コンパイルできません。 visual C++ 2008 express editionです。 ソース struct list { int data; struct list* next; }; newcell = malloc( sizeof(struct list) );
548 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:43:20 ] >>547 問題の起こるソースコードとエラーメッセージを書けよ
549 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:15:01 ] >>548 すいません ここのソースコンパイルしようとしたのですが ttp://www.geocities.jp/ky_webid/algorithm/010.html 1>z:\users\phenix1gou\documents\visual studio 2008\ projects\list\list\source.cpp(77) : error C2440: '=' : 'void *' から 'LIST *' に変換できません。 って出ます。
550 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:15:58 ] newcell = (struct list*)malloc( sizeof(struct list) );
551 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:17:12 ] キャストすれば newcell = (LIST *)malloc( sizeof(struct list) );
552 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:17:49 ] >>549 .cppにすんな.cにしれ
553 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:18:13 ] ありがとうございました。 キャストしたらできましたm(’_’)m
554 名前:kazu [2008/10/02(木) 22:38:31 ] 独学ではじめた者です。 練習問題 ・数値を複数回入力し、最後に"END"と入力された後、それぞれに対し 80以上なら"verygood"、80未満で60以上なら"good"、60未満なら"normal" と表示されるプログラムを作成しなさい。 例) 25(enter押下) 90(enter押下) 73(enter押下) END (enter押下) 25 normal 90 verygood 73 good という問題なんですが、 正解が分かりません。 本にはヒントとして 1 文字の入力にはgets()という標準関数を使用する。 2 "END"との比較にはstrcmp()という標準関数を使用する。 3 文字を数値に変換するには、atoi()という標準関数を使用する。 4 繰り返し文(for、while文)とbreak文 と載っていました。 どなたか教えていただけないでしょうか? よろしくお願いします。
555 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:40:47 ] >>554 そういうのは宿題スレで聞け
556 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:44:44 ] その本は模範解答載せてないのか 不親切だな
557 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:51:08 ] >>554 char s[10000]; int x[10000]; int i, j; for (i = 0; i < 10000; ++i) { gets(s); if (strcmp(s, "END") == 0) break; x[i] = atoi(s); } for (j = 0; j < i; ++j) { if (80 <= x[j] ) { printf("%2d verygood\n", x[j]); } else if (60 <= x[j]) { printf("%2d good\n", x[j]); } else { printf("%2d normal\n", x[j]); } }
558 名前:kazu [2008/10/02(木) 23:35:55 ] >>557 親切にありがとうございます。
559 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 23:52:06 ] >>558 死ねやゴミ
560 名前:デフォルトの名無しさん [2008/10/03(金) 00:42:03 ] stopppp4ststartcommandoperation2ppppppppppppppppppppppppppppppppppppppppppppppppppppppppPPPPpppp stopp stack stack stack stack chr dir 2 sometime printf troff terminal fuu サーバーに接続します ターボコマンドをおねがいします cdプレイヤーの接続名をきにゅうしてください PL2 メーカーはマランツ 88 pl2の意味をおかきください 初期モデル プレイヤーの搭載位置をおかきください マウント22 日本製と認識しました ではくわしい おんしつを おかきください ひらがなでおかきください じどうにんしきソフトをきどうしてください きどうご じどうちょうせいに はいります。 おわります どうもありがとうございました。 eth:0 それでけっこうです エンファシスをクリヤモードにいたします。
561 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:46:30 ] ., -、,. -─- 、⌒〉 { } ヽ_ r'⌒) ヽ、 ,,-‐‐ ‐‐-、 iヽ、 J { 、_(o)_,: _(o)_ヽ/ ヽ/∪ ! >:: } / 丶 l /( [三] )ヽノ‐''> < つわぁぁぁああああ! i⊂}__ `二´‐'´__/__ ヽ ‐- 、二`ヽ/〉⊂ニニ⊃) | // ̄ ̄)j~U^∪ヽ ノ ` ‐-L!--‐''(´ ) `i''ー----‐ ''"´ ヽ、__/ ! } ` } !. , -‐- 、. ノ--─ ' はちみつだと思ったら味噌だった〜 ヽ、_{. `ヽi'⌒i `''‐- 、.. __,!
562 名前:デフォルトの名無しさん [2008/10/03(金) 03:51:38 ] すいません、LSI‐C86試食版を落として使ってるんですが なぜかプログラムをコンパイルして実行すると日本語部分だけ 文字化けしてしまいます chcpでいろいろとコードいじったりしてみても効果なしです ググったりしたんですがそう言った情報はまったく載っていません どなたか教えてください ちなみにOSはVistaのホームベーシックです よろしくお願いします
563 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 05:25:27 ] そんなもの使うな VC++かMinGWを使え
564 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 09:37:29 ] 文字化けする最小のコード貼ってみてよ
565 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 10:44:00 ] makeが成功したら実行と言う場合 make && ./a と言うのが定石だと思うんですが./aを明示せずにmake自身に (開発中にテスト的に)実行させるような一般的な表記ってありますか? とりあえず make && make run ってやってます。
566 名前:デフォルトの名無しさん [2008/10/03(金) 10:49:32 ] make build test
567 名前:デフォルトの名無しさん [2008/10/03(金) 13:49:45 ] いまどきLSI-Cとかまだ使ってるんだ。。VC++のExpressEditionがあったり 意外としられてないけど、.NET FrameworkSDKはコマンドライン開発専用のコマンドラインがあるのにね。
568 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 14:16:36 ] 入門書をそのままなぞってるんじゃない?
569 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 14:39:11 ] int main(){
570 名前:デフォルトの名無しさん [2008/10/03(金) 14:40:38 ] int main(){ double hoge[256]; func(hoge); } int hoge(double data[]) } これはアドレス渡しですか?それとも配列のデータをコピーして渡していますか?
571 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 14:43:31 ] int hoge(double data[]) { } int main() { double fuga[256]; hoge(fuga); } だと思うんだが基本はアドレス渡し
572 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:27:21 ] hogeはプロトタイプ宣言されていると考えてください。 アドレス渡しということはメモリの無駄は発生しないということですか?
573 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:29:27 ] >>572 まあ、配列は内部的に見るとポインタで持ってるしなあ。
574 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:31:57 ] 配列全体のコピーが作られるかと言う意味なら作られない。 逆に言えば関数内で不用意にいじると配列が破壊される。
575 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:49:10 ] 配列の中身を見たいだけなので、書き換えたりはしないです どうも!
576 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:15:18 ] 571だけどプロトタイプ宣言に噛みついたんじゃなくて 配列名と関数名が一緒ってのが気になったのよ 納得できたようでなにより
577 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:18:13 ] そもそも関数名が違うしなw
578 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:20:36 ] >>576 すいません。適当に書いたんで一緒のなめえになっちゃいました
579 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:22:20 ] なめえww らめえww
580 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:37:00 ] 中国人ですね。わかります
581 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:43:39 ] >>575 書き換えないことが確定的ならconstをつけておけ
582 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:46:02 ] int hoge(const double data[]) { } int main() { double fuga[256]; hoge(fuga); } こうですか?
583 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:09:17 ] >>582 そう >hoge(fuga); このときhogeに渡っているのは &fuga[0] つまり配列の先頭の要素のアドレス constを付けずにhoge内でdataの中身を変更するとfugaの中身も変更される
584 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:31:43 ] アルゴリズム概論って言う授業で システムを想定せよ、っていう宿題が でたんですが,何を書けばいいでしょうか?
585 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:34:53 ] >>584 >>1 を100回読んでからお帰りください
586 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:35:13 ] それだけじゃ何を言ってるのかわからないから三倍に書き足して宿題スレで聞け
587 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:18:33 ] WinLibD.lib(Misc.obj) : warning LNK4099: PDB 'vc80.pdb' が '..\WinLib\lib\WinLibD.lib' で、または 'c:\Documents and Settings\\デスクトップ\VS2005対応版\chapter5\Debug\vc80.pdb' に見つかりません。デバッグ情報がないものとして、オブジェクトにリンクします。 このエラーはどうすれば回避できますか・・・?
588 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:19:42 ] 回避すべきエラーが存在しません
589 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:21:46 ] エラーじゃなくて警告な ライブラリにvc80.pdbが含まれてなかったなら諦めるしかない
590 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 20:06:02 ] >>588 >>589 ありがとうございます