くだすれC言語(初心者用)

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2007/02/09(金) 12:42:26
>>948
添え字付きの配列を引き数にする
953デフォルトの名無しさん:2007/02/09(金) 12:44:24
>>952の場合、配列要素を渡すと言った方がいいのか
954デフォルトの名無しさん:2007/02/09(金) 12:48:40
>952
添え字付いてても参照渡しでしょ?
955デフォルトの名無しさん:2007/02/09(金) 12:49:28
つか元々Cって、配列の実体はポインタだったような (語弊がある?
>>942-943のどちらの方法でも渡されてるものは同じだから問題なく動くんじゃ


いい加減スレ違ってきそうだが
>>952
sub(array[0], array[1], array[2], ...);
main内部とかでこうやって呼び出すってこと?
不可能ではないが、一体なんの意味があるのかと。
特定の要素を渡すのなら問題無いと思うけど
956デフォルトの名無しさん:2007/02/09(金) 12:52:14
いや>>946>>944へのレスだから
あくまで可能性を言ったまでで
そこまでマジレスされても困る
957デフォルトの名無しさん:2007/02/09(金) 12:57:31

( д)     ゚ ゜   >>956

         ↑
         めろこ
958デフォルトの名無しさん:2007/02/09(金) 13:09:48
>>955
配列全体か配列要素を渡すかケースバイケースだけど意味はあるはず
例えば
・値呼び出しで配列要素を渡した場合、呼び出された関数が元の配列の値を変更できない
・大きな配列全体を頻繁に渡すと実行速度に差がでる
とか
959デフォルトの名無しさん:2007/02/09(金) 15:46:14
>>958
いや、だからCでは配列を(そのまま)値渡しする手段がないんだってばさ。
960デフォルトの名無しさん:2007/02/09(金) 16:25:37
以下のwork構造体をaかつbで昇順にqsortする場合、qsortの比較関数は
どう書けばいいのでしょうか?
struct work {
char a[5];
char b[5];
}
aだけで昇順ソートなら↓とわかるのですが・・
int cmp (const void *p1, const void *p2) {
contst struct work *s1 = p1;
contst struct work *s2 = p2;
return strcmp(s1->a, s2->a);
}
961デフォルトの名無しさん:2007/02/09(金) 16:32:57
>>960
>aかつbで昇順
ここを詳しく。

例えばaを主キーに、bを副キーにするならこうなる。
int foo = strcmp(s1->a, s2->a);
if (foo < 0 || foo > 0) return foo;
return strcmp(s1->b, s2->b);
962デフォルトの名無しさん:2007/02/09(金) 16:41:41
>>961
そういうことです!なるほどわかりました
qsort二回呼ぶ必要無かったんですね・・
963デフォルトの名無しさん:2007/02/09(金) 17:52:38
>>962
逆に、qsort()は非安定なソートで実装されている可能性が高いから二度呼んじゃいけません。
#安定なソートなら副キーでソートしてから主キーでソートすればできるけど。
964デフォルトの名無しさん:2007/02/09(金) 18:33:21
>>959
構造体なら値渡しできるということでは駄目か。
965デフォルトの名無しさん:2007/02/09(金) 18:56:01
初めまして。最近C言語を勉強し始めた者です。
早速質問なのですが、Visual C++ 6.0で

#define max 30;
struct _test
{
int a;
int b;
int c;
}test[max];

とやると

構文エラー : ']' が ';' の前に必要です。
構文エラー : ';' が ']' の前に必要です。

と出てしまいます。
こう言う[]の使い方は出来ないのですか?
966デフォルトの名無しさん:2007/02/09(金) 18:59:00
#define max 30;
        ~~~~
すなわち

struct _test test[30;];
967デフォルトの名無しさん:2007/02/09(金) 19:33:00
>>966
ありがとうございました。解決しました。
#defineは;はいらないんですね…。
968デフォルトの名無しさん:2007/02/09(金) 19:54:58
#define max 30; < 最後の ;(セミコロン)要らないんじゃね?
969デフォルトの名無しさん:2007/02/09(金) 20:18:29
>>965
#define max 30;
セミコロン要らない
970デフォルトの名無しさん:2007/02/09(金) 20:31:34
971デフォルトの名無しさん:2007/02/10(土) 15:55:16
最近もぐらたたきのプログラムに触れてすごいと思ったんですが、少し疑問が。
ソース見て、ん?となり、これってコンピュータは処理が高速だから、
リアルタイムに動いているように見えているだけなんでしょうか?

だとすると普通のCで同時に処理する事はできないんでしょうか?
972デフォルトの名無しさん:2007/02/10(土) 16:10:00
同時に処理する必要性が感じられない。
973デフォルトの名無しさん:2007/02/10(土) 17:47:03
>>971
どんなコードか判らないが…

「高速に動いている」ことと
「同時に動いている」ことは
直接の関連性は無い。

そのコードが出力(描画含む)結果の反映を
即時(or自動)でやってるならば「高速で処理しているから同時に見える」。
逆に、反映を一度にするよう制御しているなら
「コード上は、本当に同時に動いている」。
974デフォルトの名無しさん:2007/02/10(土) 17:57:23
>>971
リアルタイムは同時である必要はないし
処理には時間がかかるはずなので完全な同時ということはありえない。
遅れた情報を捨てて最新の情報を常に表示するのがリアルタイム。

操作すると瞬時にモグラを叩いている画像に変わるということか?

昔に比べると画像の作成して表示する処理はとてもなく速くなったね。
十数年前のパソコンだと作成に少し待たされ
しかも描画している様子まで見えたが
今はパソコンで動画を見ることが余裕に出来るくらいの性能になった。
975デフォルトの名無しさん:2007/02/10(土) 18:01:05
そのもぐらたたきはループ回して入力チェックと描画を交互にやってるんではないかとエスパー

同時に処理とはマルチスレッドのことを言ってるんではないかとエスパー
976デフォルトの名無しさん:2007/02/10(土) 23:59:21
>>972->>975
レスありがとう&分かり辛くてすみませぬ
確かfor(;;)ループ内で何個かループ処理がありました
マルチスレッドはまだ分かりません

もぐらたたきのソースを見たのはこのhpです
ttp://www.geocities.co.jp/SiliconValley-Bay/7437/index.html
977デフォルトの名無しさん:2007/02/11(日) 08:38:45
>976
そのサイトは参考にしてはいけません。
もしブックマークしてるなら速やかに削除してください。
978デフォルトの名無しさん:2007/02/11(日) 10:26:31
速やかに登録しました
979デフォルトの名無しさん:2007/02/11(日) 10:47:52
うぁはは、こっちでも叩かれてる。
http://pc10.2ch.net/test/read.cgi/tech/1170064980/501-
980デフォルトの名無しさん:2007/02/11(日) 12:24:39
ネットの検索で上位に来るというだけで、いんちき占い師を一途に信じ続ける信者のごとく初心者が惑わされていく。
これまでも、そしてこれからも。
それは誰にも止められない。
願わくば犠牲者の魂の安らかならんことを。
981デフォルトの名無しさん:2007/02/11(日) 12:30:13
気持ち悪い底の浅い言い回しだなあ・・・
982デフォルトの名無しさん:2007/02/11(日) 12:49:43
ttp://wisdom.sakura.ne.jp/programming/c/index.html

ここは大丈夫ですか??
983デフォルトの名無しさん:2007/02/19(月) 20:45:30
大丈夫なんじゃないっすかね。
984デフォルトの名無しさん:2007/02/20(火) 14:32:51
アライメントというのがよく理解出来てなく、ネットで検索してみたのですが
class TestA {
char c;
int i;
double d;
};
class TestB {
int i;
double d;
char c;
};
というクラスは並びかたが違うだけだが、オブジェクトのサイズが異なる。(アライメントが8以上の場合。)

テスト(実行)する環境がないからサイズがどう違うのかも判りません。
テストAとBのサイズ(バイト数)はどうなっているのでしょうか?
985デフォルトの名無しさん:2007/02/20(火) 14:45:44
Aが16バイト
Bが24バイト
986デフォルトの名無しさん:2007/02/20(火) 14:59:24
>>985
成る程。変数宣言の時に今までのバイト数(char2つ、int1つ)に組み合わせられない(doubleやint)場合、
以前のサイズは余白を使って8バイトとするといったイメージで宜しいのでしょうか?
Aは
char,int 1+4+余白3バイト
double 8バイト 合計16バイト
Bは
char 1+余白7バイト
double 8バイト
int 4+余白4バイト 合計24バイト
即レス有難う御座いました。
987デフォルトの名無しさん:2007/02/20(火) 15:09:35
アーキテクチャによっては、例えばdoubleの値は8バイト境界に存在しないといけない。つまり、こういうこと。
┌───────────────┐
│        double値         │8の倍数のアドレス
├───────────────┤
│        double値         │上記+8
└───────────────┘
こういうアーキテクチャで8バイト境界を無視してアクセスすると異常終了に繋がる。そうでなくてもパフォーマンスが落ちる。例えばこういうこと。
┌───────┬───────┐
│    空き    │doubleの前半分 │8の倍数のアドレス
├───────┼───────┤
│doubleの後半分 │    空き    │上記+8
└───────┴───────┘
これを踏まえて構造体を考える。TestAは詰めればこうなるかもしれない。
┌─┬───────┬─────┐
│ c │     i      │ d(一部)  │8の倍数のアドレス
├─┴───────┼─────┘
│    d(残り)     │         上記+8
└─────────┘
しかし、先程示した通りdouble値は8バイト境界にないといけないとしたら(恐らくはint値も4バイト境界にないといけないだろうから)こうなるだろう。
┌─┬─────┬───────┐
│ c │  隙間  │     i     │8の倍数のアドレス
├─┴─────┼───────┤
│           d          │上記+8
└───────────────┘
同じように、TestBもこうなると考えられる。
┌───────┬───────┐
│     i     │    隙間    │8の倍数のアドレス
├───────┴───────┤
│           d          │上記+8
├─┬─────────────┤
│ c │        空き        │上記+8
└─┴─────────────┘
988デフォルトの名無しさん:2007/02/20(火) 19:19:57
たいていのコンパイラはオプションでパディングを制御できる
989デフォルトの名無しさん:2007/02/20(火) 19:36:01
>>988
随分と狭い見識をお持ちのようで。
990デフォルトの名無しさん:2007/02/20(火) 20:10:14
>>989
ん?なんで?
991デフォルトの名無しさん:2007/02/20(火) 21:59:25
>>989
抽象論で批判するなんて随分と矮小な知性をお持ちのようで。
992デフォルトの名無しさん:2007/02/20(火) 22:07:04
次スレは?
993デフォルトの名無しさん:2007/02/20(火) 23:34:28
似たようなスレ多いし、要らないんでない?
994デフォルトの名無しさん:2007/02/20(火) 23:37:42
995デフォルトの名無しさん:2007/02/21(水) 13:16:21
パディング
996デフォルトの名無しさん:2007/02/21(水) 14:18:44
ここでいいと思う
C言語なら俺に聞け(入門篇) Part 8
http://pc10.2ch.net/test/read.cgi/tech/1171946674/l50
997デフォルトの名無しさん:2007/02/21(水) 23:12:25
膿め
998デフォルトの名無しさん:2007/02/21(水) 23:41:39
産め
999デフォルトの名無しさん:2007/02/22(木) 04:51:39
1000デフォルトの名無しさん:2007/02/22(木) 05:23:20
埋め
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。