[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 05/09 20:28 / Filesize : 17 KB / Number-of Response : 67
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 31



1 名前:デフォルトの名無しさん [2008/06/27(金) 21:31:43 ]
言語の入門者向け解説スレです。

教えて欲しいのではなく宿題を丸投げしたいならこちらへ。
 C/C++の宿題を片付けます 110代目
 pc11.2ch.net/test/read.cgi/tech/1213796455/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 30
pc11.2ch.net/test/read.cgi/tech/1213367888/
過去スレ
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


32 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:33:26 ]
文字列は先頭文字のアドレスを表すから、char型ポインタに代入できるのかなと思ったんですが・・・ダメなんですかね?

33 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:34:55 ]
文字列の先頭アドレスを*aに代入するなら問題ない。
そうしてないとは思うけど。

34 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:36:00 ]
>>30
他の言語でもいいならサイト巡れば載ってると思う
大体やってることは一緒だし挑戦してみたら?

35 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:37:34 ]
>>32
char型にしろint型にしろポインタ宣言しただけだとアドレスを格納する入れ物
ができただけで、中身は不定。


36 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:42:21 ]
>>34
ありがとうございます。
少し別の言語の物を探してみます。

37 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:46:24 ]
文字列はリテラルされる(アドレス固定)
そのアドレスが入っている入れ物(変数)の中身を別のアドレスに移動しようとしたから、
おまえ、システム領域弄るんじゃないよ!
とACCESSVIOLATIONで怒られる。
>>33の言ってる*aは数値だから構わない。(参照ではなく代入)

38 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:11:16 ]
>>28 で宣言したaに、関数で文字列を入力したらエラーになるのですがなぜでしょうか
入力とは何?
a = "hoge";
とかなら大丈夫だろうけど
strcpy(a, "hoge");
はだめだよ。

>>32文字列は先頭文字のアドレスを表すから、char型ポインタに代入できるのかなと思ったんですが・・・ダメなんですかね?
文字列の方はconst charの「配列」です。



39 名前:38 mailto:sage [2008/06/28(土) 01:12:27 ]
誤字だった。
文字列の『型』はconst charの「配列」です。

40 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:33:34 ]
誰も関数にポインタをそのまま渡してる可能性を指摘しない件



41 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:36:03 ]
>>29がしてるじゃん

アドレス入れる器に文字入れればそりゃエラー起こられる罠

42 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:53:53 ]
>>41
そーじゃなくて

main()
{


43 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:54:54 ]
ミス

main()
{
 char *a;
 hoge(a);



hoge(char *a)
{
 a="HOGE";

44 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 02:02:29 ]
28がどうやったのかはっきりしない限りどれも想像でしかないけどな。

45 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 02:05:47 ]
亀だが if switch 検証。
if (j <= 20 && 1 <= j)
{
if (j == 1)
...
if (j == 20)
}
else
{
}
としたところifの方が速くなりました。
んで、if (1 <= j && j <= 20)にしたら比較のコストが大きくなって
ifの方がやや遅くなりました。

46 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 02:33:17 ]
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7114.c
範囲を指定しないなら、やっぱり switch はえー

47 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 02:38:57 ]
>>46
なんか初めてハッシュを知った新入りのような喜びようだなw
ほほえましくてイイヨーイイヨー

48 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 02:55:37 ]
>>47 意味不明。自分の理論の穴を突かれて涙目なんだろ?w
>>45


49 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 02:59:29 ]
>>48
ちがうちがう。
状況によってはifを使う方が速いこともあるよっていいたかっただけだ。
ついでに、条件文の書き方でも十分代わりうるということをいいたかった。

適した場面に適したコードを書くのは当たり前で、
switch(str)
{
case "hoge":
}
ってかけなくてswitchざまあなんて言い回しと同じように、
switchを使う方が良い場面においてif遅いなどというのはおろかなこと。

50 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 03:05:58 ]
初心者の頃にnyを使い始めて、ハッシュを知ってはしゃいだことのある
>>47 が可愛いよ皮良いよ



51 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 03:09:39 ]
>>50
なぜny?ハッシュが何を指しているか理解してない、のか?
さすがにないと思いたいんだが。
しっかり勉強しろよ?

52 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 03:27:59 ]
>>47
なんか初めてハッシュを知ったny厨のような喜びようだなw
ほほえましくてイイヨーイイヨー

53 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 04:02:02 ]
以上、チンパンジーのアイちゃんの自演でした。

54 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 04:11:30 ]
>>47 論破されて涙目だなwwww
ハッシュなんて持ち出すなら、なおさら指定範囲内の
数値に対する話は論外になるな。無関係な話ではあるが。

55 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 04:26:16 ]
>>47
茶化したつもりがハッシュなんて持ち出すから、さぁ大変。
ny厨乙。お前がそれを知って喜んでいたことの自己紹介ですか?
にしても、switch はえーなぁー、をいっw

56 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 04:51:02 ]
ハッシュとny厨に何の関係があるんだろう

57 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 07:38:10 ]
switchが早いのでこれからは
if (a == b) {
 // 処理
}

switch (a == b) {
case 1:
 // 処理
}
と書くようにします!

58 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 08:19:48 ]
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7115.txt
最適化かけまくりだと0msなんで加算処理を加えてみた。

s w i t c h 蠅ー


59 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:32:34 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7119.txt

このプログラムにおいて、最初のほうで
BSTREE_NODE *deleteMinNode(BSTREE_NODE *p, BSTREE_K_TYPE *min);
BSTREE_NODE *deleteRootNode(BSTREE_NODE *p, BSTREE_K_TYPE x);

と書かなければいけない理由ってなんなんでしょうか?
消すとエラーが出るのに、*pや*minなどの値は変更してもエラーがでないのも意味がわかりません・・

60 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:35:18 ]
色々なC言語のコンパイラがありますがおすすめとかありますか?



61 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:38:36 ]
>>59
プロトタイプ宣言かな?

コンピューターは先頭から後ろにかけて順次処理してくのは
得意ですが、人間のようにソースを見渡して関数の宣言場所
と利用箇所を眺めてちゃんと定義されてるという確認ができない
ある意味融通が利かない人なのです。

なので関数を使ってる箇所よりその関数が後ろに定義されてる場合
はソースの先頭付近に関数の頭の部分を定義してコンパイラに
こんな関数があるよと先に結論を教えてあげます。

プロトタイプ宣言がいやなら関数を使ってるところより
先に関数を配置すればOKです

62 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:42:07 ]
>>60
windowsPC持ってるならVC++かVC#でいいんじゃないの?
Cygwinとかって環境構築ではまりそうだしね

>>61の続き
プロトタイプ宣言をしたくない?ようなソースはmain関数が
ソースの一番最後にあって、main関数より呼ばれるその他
関数が上置くようになってます。

63 名前:59 mailto:sage [2008/06/28(土) 10:57:36 ]
>>61
>>62

なるほど、ありがとうございます。
この宣言において、*minなどを違う文字に変更してもエラーが出ないのはどうしてなんでしょうか?
例えば
BSTREE_NODE *deleteMinNode(BSTREE_NODE *p, BSTREE_K_TYPE *min);

BSTREE_NODE *deleteMinNode(BSTREE_NODE *a, BSTREE_K_TYPE *mn);

などに変更してもエラーは出ずに実行されるのですが・・

64 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:04:44 ]
プロトタイプ宣言は引数の数と型だけ見てるから。

65 名前:59 mailto:sage [2008/06/28(土) 11:08:56 ]
なるほど、わかりました。
ありがとうございました

66 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:13:57 ]
>>62
ありがとうございます。vc++ダウンロードしてきます。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<17KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef