1read 100read
2013年04月プログラム10: C言語なら俺に聞け(入門編)Part 113 (618) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【JS,PHP,Python】スクリプト,バトルロワイヤル30【Perl,Ruby】 (1001)
スレ立てるまでもない質問はここで 126匹目 (367)
C言語なら俺に聞け(入門編)Part 113 (618)
Regular Expression(正規表現) Part11 (241)
Androidプログラミング質問スレ Part31 (421)
Perlについての質問箱 58箱目 (423)

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


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

2 :
NULLってなんですか?

3 :
>>2
NULLです。

4 :
#define NULL 0
ポインタとかメモリアドレスを聞かれてる時にはnullptrつかうとええよ

5 :
>>5
ga

6 :
>>4
さあC++スレにお帰り

7 :
NULLってのはポインタ使わない限り使わないよね
ポインタって基本的に使わない配列があるし

8 :


9 :
           ___   ━┓
         / ―  \  ┏┛
        /  (●)  \ヽ ・
       /   (⌒  (●) /
       /      ̄ヽ__) /
.    /´     ___/
    |        \
    |        |

10 :
>>7
0 と書いて全然OKだから、私は NULL でさえ使わない。

11 :
0がぬるぽになるとか悪魔の仕様だよね
何で最初にキーワード導入しなかったんだろうと思ったが
当初ぬるぽのビット表現が0にならない環境とか無考慮で0を入れるようにしてて
その時代との互換性とかなんだろうか

12 :
リテラルの0と
数値の0と
アドレスの0と
ポインタのNULL
違いが分かる人は好きにすればいいんじゃない?
わからない人はきちんと使い分けましょう

13 :
>>8>>9
配列の場合
a[i]=NULL;→エラー
ポインタの場合
int *a=NULL;→不エラー

14 :
リテラルの0だけ仲間はずれ感があるけど気のせいか

15 :
C/C++の仕様を洗練した低レベルでネイティブな言語てないの?

16 :
どういうところを洗練すればいいと思うの?

17 :
ぬるぽになるのはリテラルの0に限らないぞ
計算して0になれば複数のリテラルからなる式でも構わない

18 :
>>15 D言語

19 :
D言語は魔改造を繰り返した結果、
C++より遥かに邪悪な黒魔術が使えるようになってしまった

20 :
C#によく似た文法のCトランスレーターなら名前忘れたが有ったような

21 :
CとC++を同一に考える時点でアホ

22 :
アドレスの0とポインタのNULLは普通のパソコンなら同じ意味じゃないの

23 :
うん

24 :
Cなら普通のパソコンでビット表現が0にならない事はほとんどないと思われるが、
C++ならg++だとメンバ変数ポインタのNULLはのビット表現は0じゃなく-1

25 :
むしろどういう環境だと変わってくるの?
CPUによるものなのかOSによるものなのか。
普通のパソコンでの当たり前が当たり前じゃない例を知らないから
想像しようとしてもよく分からないんだよね・・・

26 :
0番地が普通に使える環境だったらダメそう。なさそうだけど。

27 :
DOS時代は普通に使えてた気がする

28 :
Null Pointer Assignmentのメッセージを出すために使われてたね。

29 :
array[]= {15,78,98,15,98,85,17,35,42,15};
int main(void)
{
 int *p_array=array;
 int sum= 0;
 while(p_array<array+10)
  {
 sum += *p_array++ ;  
 printf("sum %d\n",sum);
  }

printf("average %d\n",sum/10);
return 0;
}
sum += *p_array++ ここが疑問です。
実際にはsumへの加算が終わってから、ポインタが移動しているようなのですが、
演算の優先順位( ++ > * > =)に従うとポインタが先に移動してから加算される気がしますが、そうなってはいません。
なぜこうなるのでしょうか。

30 :
ぬるぽが正しくつかわれているのを久々に見た

31 :
>>29
演算子の優先順位は ++ → * → += であるのは間違いない。
ここで *(p_array++) であるが、値は、副作用++が適用されるの前の値となる。
したがって ++ が先に適用されるにしても、加算に供される値は、++ 実行前のものとなる
キーワード「後置インクリメント」

32 :
>>29
++と*は同じ優先度で、右から左の結合でしょ?
つまり、* ( p_array++ )  

33 :
インクリメントを分離しろ

34 :
演算の優先順位と、インクリメントが行われるタイミングは別の問題

35 :
インクリメント使わずにa=a+1方式使えばいいだけの話じゃ……

36 :
・ポインタ演算は避けられるなら避けるべき。
・forが自然に使えるなら使うべき。
・型指定のintはunsigned intのようなケース以外は省略すべきでない。
いずれにしても、アナクロなコードだ。
それと、sumの出力はループの外ジャマイカ。

37 :
【PC遠隔操作】 「僕はC#を扱う技術がなかった。職場の社長も証言」 片山容疑者、容疑否認のメモ公開 取り調べ可視化を主張★3
http://uni.2ch.net/test/read.cgi/newsplus/1362890199/

38 :
みなさま、有難うございます
>>31>>32>>34
インクリメント演算子についてしらべたところ、
「値を1増加させるという意味は同じものの、増加させるタイミングが異なる。
後置のものは値を使った後に増加させ、前置のものは値を増加させてから使う。」
だからちゃんと1番目の数値がsumに代入されていたんですね。ちなみに>>29で前置インクリメントにしてみたら暴走しました。
逆にデクリメントするのだったら前置にしないと変な値になるんですね。
int *data = array + 10;
int sum = 0;
do {sum += * --data;
}while (data >array);
>>33
sum += * p_array++ ;は、
sum += * p_array;
p_array++;
と同じになりますね
>>35>>36
for(i=0;i<10;i=i+1) {
 sum = sum + array[i];}
普通は配列の合計値はこうして出した方が素直ですよね。(sumの出力は代入の確認で、配列のint宣言はコピーし忘れてました。)
自分は昔のCPU用のプログラムをいじってみようと思っています。
ポインタ演算は使うと速くてサイズも小さくなるそうなので、使ってみようと思います。

39 :
>ポインタ演算は使うと速くてサイズも小さくなる
残念ながら、これ自体が過去のもの。
却って素直にforと配列アクセスで書いた方がコンパイラが最適化してくれる可能性もある。

40 :
そうなんですか。ちょっとでも速く出来ればなと思ったんですけど。
やたら構造体が多くて、下手にポインタを使うと型が一致しなくなりそうなので、リスクの割りに効果がないならやめときます。

41 :
くだらない最適化より先にやる事がある

42 :
というより、最適化は最後の手段。

43 :
最適化のコツ:
 初心者は最適化などに色気を出さないこと。
 ベテランも最適化のことは忘れること。

44 :
最適化のコツ
・ポインタより配列を使う
・コンパイラの最適化オプションを吟味する
・GPGPUを検討する

45 :
最適化の骨
・三日後の自分が簡単に理解できるコードを心がける

46 :
最適化の落ち
・馬鹿の考え休むに似たり

47 :
初心者は、「最適化」と「あるべき姿のコード」の区別がつかない。
読み易いなコードを書けと言うと、シンプルなコードではなく、冗長なコードを書く傾向がある。
これは「非最適化」とされ、要するに初期悪化なので注意。

48 :
お前好みのコードになってるかそうじゃないかだけだろカスwwwww

49 :
#include <stdio.h>
int main(void) {
int a=1,b=2; /* 「a=1」、「b=2」とする。  */
if ( a = b ) puts ("YES"); /* 1=2ならYESと表示する。   */
return 0; /* 終了する。         */
}

50 :
if (a == b) だろ、ボンクラ

51 :
Cを勉強中1週間目の超ド素人です。
数値を文字列に変換し、下記のようにくっ付けるなんて関数はありますか?

"123" + "456" + "789"

123456789
こんなふうにできますか?よろしくおねがいします。

52 :
sprintf
strcat

53 :
リテラルなら並べときゃくっつくが、
まあそういうハナシじゃないよな。

54 :
例だと文字列から数値に変換したいようにも見えるが

55 :
文字列として連結した結果をさらに整数型に変換しろって問題?

56 :
すみません言葉足らずでした
整数A,B,Cを、文字列に変換し、ABCという文字列にしてから、ABCという整数に変換したいです

57 :
strtol()でも使えばええやん

58 :
>>56
整数100,200,300,....を <= 入力整数の個数は?
文字列の"100200300...."にして <= 出力
更にこれを整数100200300....にする <= 出力
こんな関数あるかと?

59 :
int abc;
char s[256];
sprintf(s, "%d%d%d", a, b, c);
abc = atoi(s);

60 :
>>59
いつものようにさりげなく嘘書くな
>int abc;
なんだよこれ

61 :
>>60
それは>>56の整数ABCを宣言したものです。何か間違いでもありますか?

62 :
C言語でDXライブラリ無しでゲーム作るとしたらどの程度のゲーム作ることできる?
普通に2Dとかのアクションゲームやらシューティングやら作れる?

63 :
>>62
SDL
OpenGL

64 :
 OpenGL+C言語+SDLで3Dに挑戦!

65 :
DXライブラリなしならDirectXを直接叩けばいいのでは

66 :
>>60
嘘つきはお前だ、同業者さん。

67 :
しかしながらDirectXは、Windowsプログラミングをある程度こなせるようになる必要があるし
さらに数多くの引数や初期化で頭がパンクして、画面に描画するのですらめんどくさいしで
ゲーム作ろうと思うと線形代数が必要になってと、ものすごく覚えることがあるし
確実に艱難辛苦が待ち受けているからな、そういう意味では2Dのゲームを作るのならDXライブラリで十分だと思う

68 :
2DならGDIとMCIしてれば十分

69 :
とりあえず「DXライブラリ」利用者は
「C言語」やら「2Dのゲーム」などのように
全角英数字を使う事への抵抗が皆無なのは分かった

70 :
>>51
× int abc;
○ int abc, a, b, c;

71 :
それだけでa,b,cは未初期のまま使われてて意味ない
/* a,b,cは以上宣言されて初期化もされている */
というコメントが入れられてたら納得できたか

72 :
>>56
文字列にする必要はあるの?
abc = ((a * 1000) + b) * 1000 + c; じゃだめ?
イマイチ何がしたいか分からない

73 :
a、b、cが3桁固定とは限らないだろ

74 :
なら調べればいい

75 :
そのうちlong int超えるケタになって
まーた動かないとか言いだすぞ

76 :
桁数調べて*10再帰

77 :
>>75
連結するからすぐにそうなるだろな
入力の整数の最大値はint指定で入力整数の個数から、桁数を計算するぐらいしないと駄目かも

78 :
スイーツ(笑)
{
while(ナタデココ)
main();
}

}

79 :
doubleの使えなさは以上
精度糞スギ

80 :
まじプロフェッショナルは多売長整数使うからヨロシク

81 :
doubleが使えないならBigDecimalを使えばいいじゃない

82 :
15桁以上の精度が必要ってどんな領域よ。
本来、多倍長整数使うべきところでで浮動小数点使ってるだけじゃないのか?

83 :
(1+√(5))^n = a[n]+b[n]√(5) としたときの整数a[n],b[n]の一般項は
a[n] = (1/2)((1+√(5))^n+(1-√(5))^n)
b[n] = (1/(2√(5)))((1+√(5))^n-(1-√(5))^n)
この値を整数演算だけでO(log n)で算出する方法があれば教えて下さい。

84 :
>>82
物理

85 :
>>84
でも、多倍長実数は使わずに妥協するんでしょ。結局必要ないじゃん。

86 :
GMP使えば計算できるんじゃないかな?
ただ難解な物理をやりたいならマセマティカ買った方がいいんでない?

87 :
>>83
a(1)=1 b(1)=1
a(2)=6 b(2)=2
a(3)=56 b(3)=24
a(4)=6016 b(4)=2688
a(5)=72318976 b(5)=32342016
符号付32bit整数だと n=6 でオーバフロー
こんだけでいいならテーブルで持てばいいけど
多倍長演算するなら桁数が n^2 オーダーで増えるから
O(log n) ってのは無理じゃね?

88 :
n^2 オーダーじゃなくて n*2 オーダーだった

89 :
O(n) で増える桁数をセットするためにはどうしても O(n) オーダーの時間がかかると思う
どう転んでも無理ぽ

90 :
>>86
いや、出来る出来ないじゃなくて性能的な問題。
規模と精度で折り合いつけると倍精度で妥協する事になるでしょ。

91 :
桁数のオーダー O(2^n) じゃね?

92 :
>>73
むしろ固定じゃないものを連結するってどういう状況なんだ

93 :
めんどくさい奴らだな
typedef char d[10000] で1万桁だ

94 :
で?

95 :
InitCommonControlsEx イニットコモンコントロールR

96 :
>>83
実はフィボナッチ数列(の亜種)じゃね?

97 :
a[n]=a[n-1]*a[n-1]+5*b[n-1]*b[n-1];
b[n]=2*a[n-1]*b[n-1];

98 :
ランダム・アクセスでの読み込みについて聞きたいです
まず、バイリファイルを作成し、それを読み込もうと思ったのですが、どうしてもできません
どこが間違ってるか教えてください。

99 :
>>98
あなたの姿勢に問題があります。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
文字コード総合スレ part8 (213)
Visual Studio 2012 Part6 (487)
Eclipse統合M34【Java/C++/Ruby/Python/Scala】 (309)
Perlについての質問箱 58箱目 (423)
C言語なら俺に聞け(入門編)Part 113 (618)
Eclipse統合M34【Java/C++/Ruby/Python/Scala】 (309)
--log9.info------------------
インチキ僧侶_博峰が落書き禁止教を伝授します (964)
日本人の無神論 (333)
【カトリック】聖母マリアの取り次ぎは意味あるの? (685)
【2ちゃん】†癒しの森教会†003【イエスは主】 (882)
クリスマスまで毎日ロザリオの祈りを唱える (528)
【カトリック】真・信心スレ【他教派歓迎】 (253)
すいません。僕、仏陀なんですけど、、、。 (327)
クンダリニーpart2 (708)
【根拠無しOK】死後世界について詳しく頼む11 (828)
ダキニ天の真言を唱える (268)
現人神_昭和天皇の悪事を暴く (645)
【仏教】99%の経典は偽経・偽書です! (345)
【SDA】SDA教団の狂気を斬る 2【偽善・陰険】 (955)
★食事に気をつける★ (343)
日本の大乗仏教の終焉 (317)
宗教が実生活にもたらすメリットは? (229)
--log55.com------------------
シューティングレンジ情報を語れ2
サバゲで危なかったこと、トラブル書いてけpart2
【違法】改造エアガンパーツを買う香具師【パーツ】
大阪泉南大阪グリーンキャニオンOGCどうよ2
ブルパップ型ライフル総合スレロ
【BATES】サバゲーで使う靴を語る【MERRELL】 2
【クレクレ】石井健夫6スレ目【オウオウオウ】
ゾンビ行為する奴の気持ちが多少は理解できる