トップページ⇒tech
1001コメント275KB

C言語なら俺に聞け(入門編)Part 92

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/11/10(木) 22:55:06.15
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 91
http://hibari.2ch.net/test/read.cgi/tech/1319581056/
★過去スレ
http://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++の宿題片付けます 153代目
http://hibari.2ch.net/test/read.cgi/tech/1320365280/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
0002デフォルトの名無しさん2011/11/10(木) 22:56:09.00
     ,.;'‐、____,:-;';:、.
   /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ.
  /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ.
  /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:ヽ.
  i;:;:;:;:;:/ノ-'-''"ヽ;:;:;ヽ'''-ヽ、;:;:;:;:;|
  {;:;:;:;:ノ■■■   ■■■ヽ;:;:;}
  ヽ;:;{    _   _    |;:;:{
   };:;|三/ ●),. 、(● ヽ三 |〈
   ヽ| " ゙='"/:::ヾ='"゙  | }     __________
   { |∫ ∴ (,.、::,. )  ∵ |/    /
    ゝ::●. ...:人:人:::.....  ...!   < そーですワタスが変なおじさんです
    {;;ヽ:.:.:.:.:.:.:.<Ξ>:.::.:.:.:.:.:.:/;}    \
   / ヽ:.:.:.:.::.:.:.:.:.:.:.:.:.:.:/ \       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 /    |ヽ:.:.:.:.:.:.:.:.:.:/|    \
       ヽ ̄ ̄ ̄  /
        ヽ___/
0003デフォルトの名無しさん2011/11/10(木) 23:10:16.68
>>1
大変お疲れ様です
死にます
0004デフォルトの名無しさん2011/11/11(金) 00:57:39.31
長文失礼します。

戻り値が構造体の関数を宣言し、構造体を戻り値として返したときに、
その構造体をポインタ変数へ代入したいのですが、うまくいきません。
p = tesFunc;
(p:ポインタ変数、tesFunc:戻り値が構造体の関数)
イメージとしては、こういう風にしたいのです。

いくつか、やり方を変えて試したのですが、エラーが出てしまいます。

私がやりたいことは、
ある構造体を色々な関数で使い、なおかつ値を変えたりしたいわけです。
なので、違う方法でもできるのなら、そちらの方法で試してみたいと思います。
0005デフォルトの名無しさん2011/11/11(金) 01:01:51.76
構造体へのポインタを引数として関数に渡す
0006デフォルトの名無しさん2011/11/11(金) 01:07:35.10
>>4
まぁ素人さんはポインタなんか使わずに構造体をそのまま受け取るようにした
方がいい。
構造体を戻り値とするんだから、受け取るにもポインタではなく構造体を指定す
ればいい。
ただのintなんかと同じに考えればいい。
0007デフォルトの名無しさん2011/11/11(金) 01:16:22.78
>>5 その方法でやってみます!!

>>6 確かにポインタなんて使いたくはないんですが、
  戻り値の構造体と、受け取り側の構造体が別々の変数になってしまう
  というのが、ちょっと具合が悪くて。
0008デフォルトの名無しさん2011/11/11(金) 01:17:34.03
tesFuncの中の構造体をstaticにしてその構造体のポインタ返すようにしてみれ
グローバルに置いておきexternするみたいなことをちょっと隠蔽してみたりしたいんだよな?
0009デフォルトの名無しさん2011/11/11(金) 01:58:44.81
765プロの事務所のトイレになりたい
0010デフォルトの名無しさん2011/11/11(金) 02:28:23.20
>>4です。
解決しました。

戻り値が構造体へのポインタの関数を使うことと、staticを使用することの2つがキーだったみたいです。

皆さん、ありがとうございました。
0011デフォルトの名無しさん2011/11/11(金) 02:41:46.21
>>10
わけのわからんバグに悩まされると思うぞ?
元の変数に戻したければ素直に代入しとけ。intと同じに考えればいい。
0012デフォルトの名無しさん2011/11/11(金) 02:58:23.03
>ある構造体を色々な関数で使い、なおかつ値を変えたりしたいわけです。

こういう目的なら、構造体を1個だけ確保しておいて、「色々な関数」へは、
その構造体を指すポインタを引数として渡すのがシンプルだと思うけどな。
構造体がごく小さいものであれば>>11の言うとおり。
0013デフォルトの名無しさん2011/11/11(金) 03:36:44.59
struct A {int i;};

struct A* f(void) {
    struct A a = {.i = 9999999};
    return &a
}

先に予想しとくわ
0014デフォルトの名無しさん2011/11/11(金) 05:23:01.80
ふーん
0015デフォルトの名無しさん2011/11/11(金) 05:43:59.66
どうでもいいが、
--
戻り値の構造体と、受け取り側の構造体が別々の変数になってしまう
  というのが、ちょっと具合が悪くて。
--
これが何を言いたいのか誰か解説してくれ。
0016デフォルトの名無しさん2011/11/11(金) 06:00:24.97
どうでもいいならどうでもいいじゃん。
0017デフォルトの名無しさん2011/11/11(金) 10:02:01.51
mallocってなんなんですか??
0018デフォルトの名無しさん2011/11/11(金) 10:10:58.12
>>17
ググれ。
http://ja.wikipedia.org/wiki/Malloc
0019デフォルトの名無しさん2011/11/11(金) 13:17:49.84
bool型使って0と1だけのループ回したいんですけど
for(boo=0 ;boo <=1 ;boo++){
みたいなループ作ったら
warning: incrementing a bool value is deprecated
っていう警告が出ます。
確かにbool型に足し上げることは推奨されないですが何か別の方法ありますか?
0020デフォルトの名無しさん2011/11/11(金) 13:22:35.87
>>19
for( i=0; i < 2; ++i ){
boo=i;

わりとマジレス
0021デフォルトの名無しさん2011/11/11(金) 13:26:01.02
func();
func();
でいいだろ
0022デフォルトの名無しさん2011/11/11(金) 13:31:11.25
関数形式マクロの定義で、ある関数を呼び出すのはあまり良いコーディングとは言えないでしょうか
例えば、

int Function1(int x, int y)
{
int temp;
temp = (x + y) / Function2(x, y);
return temp;
}

こんな関数の代わりに、関数呼び出しのオーバーヘッドを考慮して、

#define Function1(x,y) (((x) + (y)) / Function2(x, y))

このようにマクロを定義するのってマズイですか?
0023デフォルトの名無しさん2011/11/11(金) 13:32:39.59
callocってサイズ指定方法とゼロクリアの違い以外はmallocと同等の機能?
0024デフォルトの名無しさん2011/11/11(金) 13:37:36.46
>>22
引数の評価に副作用がある場合はマズイ。
そうでないならおk。
0025デフォルトの名無しさん2011/11/11(金) 14:09:01.46
>>23
大抵そう。極端な場合、内部でmalloc()とmemset()を呼んでいる。
0026デフォルトの名無しさん2011/11/11(金) 14:23:25.46
>>22
C99/C++処理系ならインライン関数も検討したほうがいいと思う
0027デフォルトの名無しさん2011/11/11(金) 17:19:34.93
>>20
ありがとう
やっぱそんな感じにしないとダメですね
0028デフォルトの名無しさん2011/11/11(金) 20:39:01.57
マクロの中でリターンしてると後から読んだときに途中でリターンしてることに気付かないんだよな
0029デフォルトの名無しさん2011/11/11(金) 20:54:21.42
確保されていないポインタをfreeに投げたらどうなるの?
0030デフォルトの名無しさん2011/11/11(金) 20:59:42.33
>>29
最悪の場合宇宙が崩壊する
結構マジで
0031デフォルトの名無しさん2011/11/11(金) 21:20:42.61
ポインタにNULLを入れて何回でもfreeしてやる
0032デフォルトの名無しさん2011/11/11(金) 21:22:22.74
ポインタに宇宙を入れて見たい
0033デフォルトの名無しさん2011/11/11(金) 21:38:11.03
単方向リストを表示したいんですけど、うまくできません><
どこが間違っているか教えてください!
http://codepad.org/GDXIYcVE
0034デフォルトの名無しさん2011/11/11(金) 21:40:25.92
見てないけどヌルポで初期化してないと予言
0035デフォルトの名無しさん2011/11/11(金) 21:52:55.76
>>34
ごめんなさい、わからないです。
リストを作るところまでは、合ってますか?
0036 ◆QZaw55cn4c 2011/11/11(金) 21:53:18.23
>>33
http://ideone.com/YXuBD

>>34
いまだにその落とし穴にはまって首をひねることが。
0037デフォルトの名無しさん2011/11/11(金) 21:56:23.04
p=p->next; ←ココ
0038デフォルトの名無しさん2011/11/11(金) 22:02:53.97
>>36 ありがとうございます!
>>37 p=p->nextじゃ、移れてないってことですか?
あと実行したときに、後ろから?表示されているのもよくわかりません。
0039デフォルトの名無しさん2011/11/11(金) 22:14:01.85
うん、p->next初期化されてないも。
0040デフォルトの名無しさん2011/11/11(金) 22:19:26.90
>>38
逆順になるのは、リンクリストの最初のほうにセルを挿入してるからだな。
0041デフォルトの名無しさん2011/11/11(金) 22:21:10.39
地球どころか太陽系すべてが吹き飛ぶほどの気力がたまっているぞ
0042デフォルトの名無しさん2011/11/11(金) 22:25:43.46
>>39 p->next = start->head;
start->head = p; で、セルをつなげてる?
>>40 わかった!ところてんみたいに入れてった感じですね!
0043デフォルトの名無しさん2011/11/11(金) 22:46:38.06
いけーーーーーーー!!
ところてんマグナム!!
0044デフォルトの名無しさん2011/11/11(金) 23:10:16.53
そんなふにゃチンじゃいけんだろ。
0045デフォルトの名無しさん2011/11/11(金) 23:31:51.28
何でコンピュータの基幹演算部分って十数桁までの計算しかできないのですか?
多倍桁の計算をするときは実装するほかないですよね?

大学の考察でこんな課題がでました。
教えてください。
どうしてでしょうか?
0046 ◆QZaw55cn4c 2011/11/11(金) 23:34:42.51
>>45
>どうしてでしょうか?
How を説明すればいいのでしょうか?それとも Why ?
0047デフォルトの名無しさん2011/11/11(金) 23:41:34.79
>>45
つうか、それが分からない人間がなんで多倍桁なんて言葉を知ってるの?
0048デフォルトの名無しさん2011/11/11(金) 23:41:43.28
>>45
そうしたほうが作る人が楽だから
0049デフォルトの名無しさん2011/11/11(金) 23:42:40.74
>>46
両方お願いします。必然性があるのか、そもそもどういう仕組みになっているのか、
両方において曖昧な認識です。

プロフィール: 進研数学偏差値74.8
0050デフォルトの名無しさん2011/11/11(金) 23:45:13.26
>>47
アルゴリズムとして知ってるから。
ちなみに、桁*桁の計算が4つあったら、桁*桁を3つと足し算といった感じで
計算量を大幅に減らす事もできるんですよね。
>>48
コンピュータの内部の事情って関係ありますかね?
0051デフォルトの名無しさん2011/11/11(金) 23:51:16.19
普通に考えればわかることだよ
質問するほどのことではない
0052デフォルトの名無しさん2011/11/11(金) 23:52:32.50
メモリの無駄が増えるからですよね?
これでいいですか?
0053デフォルトの名無しさん2011/11/11(金) 23:54:50.27
多倍長演算とかcpuでサポートしたらハードウエアが複雑になるからじゃないの?
そこまでしてやる需要がないとか。

8086とか68000くらいのころはけっこう複雑な命令があったけど、その後RISCが流行って
単純な命令を高速実行する流れになって、またその後CISCががんばって効率化して
RISCとかCISCって分類が無意味になって、みたいな流れだよね。

8086のころはBCD演算をサポートする命令があったから、RISCのトレンドがなかったら
そっち方面に技術が発展して、もしかしたら多倍長演算がCPUでサポートされてる
ような世界になってたかもしれない。それはないかな?
0054デフォルトの名無しさん2011/11/11(金) 23:56:33.91
1 メモリが無駄になるから。
2 根幹演算を組み合わせて実装した方が効率の良いアルゴリズムが開発できるから。
3 ハードウェアが複雑になるから。

こういう認識でいいでしょうか?
0055デフォルトの名無しさん2011/11/12(土) 00:01:26.32
結局は互換性がうんぬんじゃろ
ハードに変更があると多大な範囲に影響が及ぶから
変えるに変えられネーってことでだらだらやってんだろ
0056デフォルトの名無しさん2011/11/12(土) 00:07:11.54
CPUにメモリって何個入ってるんですか?
0057デフォルトの名無しさん2011/11/12(土) 00:07:36.28
昔はメモリも少なかったし、必要だったら自分で作ればいいじゃん的な事
0058デフォルトの名無しさん2011/11/12(土) 00:11:06.21
>>56
レジスタだったら何十個もあるんじゃないかな。
8086の系統は少ないかもしれないけど、内部的にはたくさんもってるみたいな
話を聞いたことがある。
0059デフォルトの名無しさん2011/11/12(土) 00:25:22.04
CPUを自作ってできるのかな?
0060デフォルトの名無しさん2011/11/12(土) 00:38:00.65
なんでできないと思う?
昔はみんな自作してた。
0061デフォルトの名無しさん2011/11/12(土) 00:42:42.74
>>59
情報系なら大学の実験なんかで作るだろ。
0062デフォルトの名無しさん2011/11/12(土) 00:44:33.59
FPGAでなんちゃって自作じゃないの?
0063デフォルトの名無しさん2011/11/12(土) 00:44:43.14
最近はFPGAで自作してる人とかいるね。
0064デフォルトの名無しさん2011/11/12(土) 00:45:13.72
ttp://www.alles.or.jp/~thisida/mycpu_gougai.html
今更こんなもんやってられんわ
FPGAのほうがなんぼかやろうって気になれる
0065 ◆QZaw55cn4c 2011/11/12(土) 02:16:45.26
>>64
熱い‥‥‥。

>>61
電子系ならそうだったみたい。制御系ならせいぜい TTL ゲートでシリアル4bit 加算、というレベルでした、うちの大学は。

>>49
ふーん、今の若い子はそういう自己を表現することもあるんだ。
いや、別に否定するわけじゃあありません。私だったら‥‥これこれこうこうの本を読みました、って書くなあ(実のところ読めてなくて見たレベルなんでしょうけれども、それに気づくのはずっとあとの話)。
0066デフォルトの名無しさん2011/11/12(土) 02:37:41.99
>>65
早く説明してやれよ。>>46
0067 ◆QZaw55cn4c 2011/11/12(土) 02:46:15.39
え?もうたくさんコメントがついているので、いまさら、じゃないですかね。
0068デフォルトの名無しさん2011/11/12(土) 03:09:03.79
素直に「分からなかったので即答できませんでした」って言えよ
0069 ◆jMy.vROSfw 2011/11/12(土) 03:17:15.15
はい
0070デフォルトの名無しさん2011/11/12(土) 03:38:42.21
基本的にそれぞれの桁は前の桁からの繰り上がりを待たないといけないから
桁数が増えると必然的に結果が出るのが遅くなるんだよね
0071 ◆QZaw55cn4c 2011/11/12(土) 03:44:32.35
>>70
キャリールックアヘッド、というのがあってキャリーの伝播を極力早くする方法があります。回路はその分多くなりますが。
証明は論理式の and と or の内外をいれかえるだけだったかと記憶しています。
繰り上がり待ち方式はリップルキャリーといいます。
0072 ◆QZaw55cn4c 2011/11/12(土) 03:46:50.98
>回路はその分多くなりますが。
ちょっと不正確。多入力ゲートが2入力ゲートのくみあわせよりも早いと期待できることがポイントだったかと。だから多入力ゲートの入力数の限界までは適用できますが、それ以上は実際どうなんでしょうね、よくわかんない。
0073デフォルトの名無しさん2011/11/12(土) 03:56:20.52
そういえばどうして計算機工学の話になってるんだっけ?
0074デフォルトの名無しさん2011/11/12(土) 04:13:33.96
>>73
知ったかしたいがために、
訊かれもしていないことをぺらぺらしゃべるやつが約1名いるようなんでね
0075 ◆jMy.vROSfw 2011/11/12(土) 04:25:25.73
じゃぁお前も喋ればいいじゃん。
気持ち悪いなお前
0076 ◆QZaw55cn4c 2011/11/12(土) 04:28:13.28
>>73
>>49 からの流れ。

>>74
ま、所詮暇つぶしですからね。
0077デフォルトの名無しさん2011/11/12(土) 04:29:07.43
ああ、自覚はあるんだな
俺はお前のことだとはこれっぽっちも言ってないぜ(笑)
0078 ◆QZaw55cn4c 2011/11/12(土) 04:30:49.59
>>77
ん?私も私のことだとは言ってませんね。
0079デフォルトの名無しさん2011/11/12(土) 04:33:18.33
暇つぶしだと分かってるのにか?
0080 ◆jMy.vROSfw 2011/11/12(土) 04:33:29.82
ヒョードルやジョシュにとってハントは休憩みたいなもんだろ。
0081 ◆jMy.vROSfw 2011/11/12(土) 04:39:13.92
>>80
え? もう鳥パクッタ?
0082 ◆jMy.vROSfw 2011/11/12(土) 04:44:42.18
69で使ったばっかりのトリップなのに何でもうパクられてんだ!
0083 ◆xTnvTYkz3o 2011/11/12(土) 04:48:06.96
こえぇぇ。(´・ω・`) 鳥変えた。
0084デフォルトの名無しさん2011/11/12(土) 06:02:44.63
コテつけて暇をつぶすスレはここですか?
0085デフォルトの名無しさん2011/11/12(土) 06:18:05.00
もう一回>>83の鳥解析してよ
0086デフォルトの名無しさん2011/11/12(土) 11:49:35.81
bool a();
bool b();

if (a() || b()) ... としたときに b() が呼ばれない可能性がある。。というのはいいんだけど、

bool x = false;
x |= a()
x |= b()

こういう場合でも b() が呼ばれない可能性ってあるの?
0087デフォルトの名無しさん2011/11/12(土) 11:51:24.47
a()でexitしてたら、駄目かな?
0088デフォルトの名無しさん2011/11/12(土) 12:00:04.55
つーかそもそもコンパイル通らないから呼ばれない確率100%だよ
0089デフォルトの名無しさん2011/11/12(土) 12:43:50.98
>>82
すぐバレる嘘つくな糞vipperがwww
お前の鳥でググってら一杯出てくる出てくるwwwwwwwwwwwww
0090デフォルトの名無しさん2011/11/12(土) 13:00:52.95
なに、この基地外?
0091デフォルトの名無しさん2011/11/12(土) 13:04:06.48
たぶん糞コテがVIPから呼び込んだ奴
0092デフォルトの名無しさん2011/11/12(土) 13:09:12.93
全角二文字の一般的な単語じゃ被ってもおかしくないか。
しかし、1時間ちょいで同じコテ見つけて書き込めるかねぇ?
0093デフォルトの名無しさん2011/11/12(土) 13:15:15.57
>全角二文字の一般的な単語

それが分かるのは糞コテ本人か解析者
レス内容からして>>92は糞コテ本人と推定
0094デフォルトの名無しさん2011/11/12(土) 13:31:52.08
推定も糞も>>69,83は俺だって。
最近のコテだと◆QZaw55cn4cと>>80は別人だが。

コテ付けてほしいのか?
今時コテ叩きして楽しいかい?
0095デフォルトの名無しさん2011/11/12(土) 13:41:12.63
君の余計な一言

>最近のコテだと◆QZaw55cn4cと>>80は別人だが。

いや、君と◆QZaw55cn4cが同一人物の可能性なんてちっとも考えなかったよw
0096デフォルトの名無しさん2011/11/12(土) 13:42:49.23
ちょっとはカンガエロヨ
0097デフォルトの名無しさん2011/11/12(土) 13:48:30.65
>>86
下のは両方呼ばれるよ。
しかし、bool型にビット演算って違和感が。
警告とか出ないのだろうか。
0098デフォルトの名無しさん2011/11/12(土) 17:02:00.63
重複順列に関してです。
A,B,C,...,G,Hという7個以上の要素から6つ取り出して並べたときの、全ての組み合わせを出したいのですが、うまくいきません。

例としては、
AAAAAA
AAAAAB・・・
と出していくのですが、同じ要素を使っていても並び方が違えば別のパターンとして表示します。

長文申し訳ありませんが、手におえず、ご教授頂きたい次第です。
よろしくお願いします。
0099デフォルトの名無しさん2011/11/12(土) 17:22:21.29
>>98
7進数6桁の数値として考えればOK
0100デフォルトの名無しさん2011/11/12(土) 17:27:25.98
CでホームページのCGIを組んでいる人っているのかな?
0101デフォルトの名無しさん2011/11/12(土) 17:36:30.17
>>100
いる
■ このスレッドは過去ログ倉庫に格納されています