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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/08/11(日) NY:AN:NY.AN
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 117
http://toro.2ch.net/test/read.cgi/tech/1373675124/
★過去スレ
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++の宿題片付けます 165代目
http://toro.2ch.net/test/read.cgi/tech/1370255305/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0652デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
先の先をいじりたいとき
0653デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>651
アドレスを代入・参照するだけなら、そうとも言えなくはないのだけれど。
C言語ではポインタの計算ということができて。そのためにポインタが
示しているアドレスに何が入っているか区別する必要があるんですよ。
0654デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>651
分けていることに意味がある。
分けないという事は型によるエラーが起こらない。
言語のチェック機構の恩恵が得られない。
0655デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>651
一理あるんだが

思うとおりにコード書いてみな
アイちゃんでも答えを導ける解りやすい問題にぶち当たるから
0656デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
俺も最初は「void*だけいいんじゃね?」と思ってたけど
よくよく考えると「void**」は使う事があるな

ま、キャストすれば関係ないんだけど
0657デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
void*で受けると、一旦void**にキャストしないと中身の中身にアクセスできない。
0658デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
void f(void** p)
{
*p = malloc(100);
}

main()
{
void *p;
f(&p);
}

引数でvoid*の値を返そうと思ったらvoid**で書くのが自然。
0659デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
関数じゃなくて部分を移植したい場合
変数を変換しないとだめで面倒臭いんですが
移植できる方法ありますか?
0660デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
{
}
で括る
0661デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
関数化しろよ
というか関数のデザインが悪いだろ、それ
抽象化できるか検討してみ
0662デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
コ、コピペ・・・だと?
0663デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
行列にx,yはどう対応付けたらいいですか?
列がx 行がyのほうがいいですか?
それとも逆か。
変数の問題ですけど.........
どっちが分かりやすいですか?
06646632013/08/28(水) NY:AN:NY.AN
というか列と行の概念を言葉が邪魔してます。

行は横ですが、その行のまとまりは縦にならんでますよね?
列は縦ですが、その縦のまとまりは横に並んでるじゃないですか?

なんかわからないんですけど
06656632013/08/28(水) NY:AN:NY.AN
なんかすっきりするイメージの仕方ありますか?
forfor構文書くときいっつも躓くんですよ。
0666デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>663
FORTRANとCでは伝統的に行と列が逆だからな
Cは基本的に一次元配列しかない
それが拡張されて配列へのポインタが構文糖で多次元配列に書けるようになっているだけ
中では配列へのポインタに戻される
つまり行が先

でも絶対に混同してはいけないのは、ポインタ配列を持っても見かけ上は全く同じに書けて
しまい、後から原因不明のバグに悩まされる危険がある
しかし動的に多次元配列を確保する方法が複数あるというのは柔軟性がある
06676632013/08/28(水) NY:AN:NY.AN
>>666
行が先という事は
配列str[i][j]ときたら行がiってことですか?
これは関数の場合もそうなんですか?
int str(int i,int j)のような関数があればiが行ですか?
06686632013/08/28(水) NY:AN:NY.AN
あ
>>666は機械内部の話をしてるのかな
0669デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>667
配列はそれで合っている
関数の引数は自分で勝手に定義していいのでそうとも言い切れない

それにFORTRAN <=> C では tarnspose() が使えるだろ?
転置関数ね
06706632013/08/28(水) NY:AN:NY.AN
レター書くとき、縦に書かずに、横に書きますよね。
ってことは行ってのがまず大事で、成分見つけるにはどの行の何番目か
って順序だと思うからやっぱり先に来るものをとにかく行としといたほうが
いいんですかね。
0671デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>668
背中にバカと書いてある
0672デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>670
いやそうではなく、さっきも言ったが極論すればC言語の配列には「列」という概念が元々ない
それを構文糖で列に見えるようにしてるだけなんで
06736632013/08/28(水) NY:AN:NY.AN
>>672
列のような概念が無い?
リストってことですか?
0674デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
a[i][j] と a[i][j+1] が物理的に隣接していることに
依存するのか、しないのか、それだけだ

/* アドレス線の意味づけなんか知らんやつのね */
0675デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
こういう初心者に[]演算子を一切使わない記法を見せたらかえって混乱するのかなあ
06766632013/08/28(水) NY:AN:NY.AN
>>674
cの場合隣接してないんですか?
06776632013/08/28(水) NY:AN:NY.AN
とにかく最初=行、後=列、番目って覚えるようにしたらすっきりしました。
0678デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>646
Cならgccでいいんじゃね
clangってC++11の機能の実装だけならgccより進んでるけど
それ以外の最適化とかはまだまだgccに負けてるらしいし
06796632013/08/28(水) NY:AN:NY.AN
プログラミングやってたら絶対頭固くなるな
脳の疲労が半端ない
快楽につながってる人は間違いなく変態天才だ
0680デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
http://www.nurs.or.jp/~sug/soft/tora/tora10.htm

この当たりを読んでもらえば俺の言ってる事に近いと思う

脳の疲労?JavaとかC#のようなGC言語の方がよほど変態的じゃないか?
06816632013/08/28(水) NY:AN:NY.AN
>>680
Cでプログラム組んだ後は
手が震えるというか、服着替えるのもぎこちなくなる。
頭を使いすぎてるんだろうか。
06826632013/08/28(水) NY:AN:NY.AN
>>680
ありがとう....
参考にする。小ネタは大好きです。
0683デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
>>681
それ多分慣れてないだけ
慣れたら何ともないよ
0684デフォルトの名無しさん2013/08/28(水) NY:AN:NY.AN
しかしJavaのGC何とかしてくれ・・・・
コンテナでメモリリークが起きると非常にバグが取れにくい
GCはメモリリークが起きないと勘違いしているバカが組んだプログラムを直すのは
マジ一から書き直した方がいい位

スレ違いでした
0685 ◆QZschizo.ptH 2013/08/28(水) NY:AN:NY.AN
>>679
お褒めにあずかり光栄です :-)
0686デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
相変わらず気持ち悪いな QZ
0687 ◆QZschizDIU 2013/08/29(木) NY:AN:NY.AN
また褒められたヽ(´ー`)ノ
0688デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
きっも
0689デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
公開オナニーで醜態晒しまくってるリアル変態だから
0690 ◆QZschizo.ptH 2013/08/29(木) NY:AN:NY.AN
>>687
トリップは正格に

>>689
>醜態
具体的には例えば?
0691デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
しつけーんだよ
自覚のない馬鹿には何を言っても無駄
0692デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
掛かっている精神科の主治医に聞いたらいいと思うよ!
0693デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
文系で独学でCを一週間ほど勉強してる者です。

キーボードからアルファベット10文字を入力し、一番小さいものを返すプログラムですが、
5回しか入力できず、表示もうまくいきません。


http://pastebin.com/A29UKvJD
0694デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
>>693
一文字打つごとにEnterを押してない?
Enterも文字扱いだから、5回打った時点で10文字になるよ。

if (ch != '\n')・・・とか改行をはじく処理を入れるか、fgtes()みたいに
行単位で読み込む関数を使うかにすればうまくいくと思う。
0695デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
>>694
なるほど、そうだったんですね。
納得しました、ありがとうごじあます。
0696デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
投稿前に誤字のチェックすらできない文系
0697デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
誤字があると補完にすごく手間取ったり、スラングとは発想できないお人?
0698デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
fgtes が見つかりませんでしたって可能性の方が深刻
0699デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
>>698 fgtes(wwwwwwwwwwwwwwwwwwwww
0700デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
fgtesでググってもfgets()が最初に出てくるから大丈夫
0701デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
>>353
そうか?
常識かと
0702 ◆QZschizo.ptH 2013/08/29(木) NY:AN:NY.AN
>>691
具体的に表現できないのか?
>>692
「お薬増やしておきますね」
0703デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
悪化したのか…(納得)
0704デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
最近書き込みがガタッと減ったよな(笑)
0705デフォルトの名無しさん2013/08/29(木) NY:AN:NY.AN
>>704
情報流出して大変なんだろw
自演やあらしをしていた人達は
0706デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
最近書き込みがガタッと減って寂しいよな(笑)
0707デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
プログラマの面接行ってきたけどポインタの説明完璧にしたのに
落ちた。その場で落ちた。
0708デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
馬の絵が上手に書ける人間と
馬を自由に乗りこなす人間の違いがわかるかね?
0709デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
後者は馬の絵がヘタクソかもしれない。
0710デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
>>708
でも何のための面接なんですか.....
凄い悔しいです、今からセルフフェラチオしていいですか?
0711デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
馬の絵は山盛りウンコしない
0712デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
>>710
うむ、食いちぎれ。馬に乗るためには邪魔なものだ
0713デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
ポインタの説明完璧にしたから落ちたのでは?
0714デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
ポインタが扱えることをアピールポイントにしたのが初心者丸出しで落とされるんだろ
0715デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
完璧だと思い込んでいる時点で
登る山を間違えている可能性は高い
0716デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
「えっとですねポインタというのはですね、あるオブジェクトががありまして、なんらかの論理的位置情報でアクセスできるとき、
それを参照するものであり変数や値ではありません。有名な例で挙げられるのはC/C++でのメモリアドレスを表すポインタが挙げら
れると思います。」

この説明で落ちた。
0717デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
馬の絵どころか馬を見たことすらありません という答え
0718デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
抽象的に答えるにしてもなぜCでポインタが重視されるのかという観点が必要
0719デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
一般的にはポインタは場所を示すもので、
C/C++言語ではアドレス格納型とその演算を含めたものの総称。
有名な例だけど概念違う。
0720片山博文MZコスモ ◆T6xkBnTXz7B0 2013/08/30(金) NY:AN:NY.AN
>>716

>「ポインタというのは、…(中略)…変数や値ではありません。」

ダウト!
0721デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
この話題は荒れる
今のうちにポインタを簡潔に説明するスレを立てないと
0722デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
ポインタは値ではないと言った時の俺分ってる感は異常
0723デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
「論理的位置情報でアクセスできるとき、 それを参照するもの」
この説明もおかしい。
そこにアクセスできるかは関係なく、
論理的位置情報を指し示すものであって自身は参照もなにもしない。

自分に酔った説明の割に内容がめちゃくちゃ。
0724デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
アドレス値を格納するものだろ
0725デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
参考文献:Wikipedia
0726デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
というか面接官はCのポインタについて聞いてるはずなのに
Cじゃないポインタをドヤ顔で語ってるのか
0727デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
マウスポインタの説明を求めているのかもしれない
0728デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
人事も仕事してるフリしなきゃいけないんだよ
採用する予定なんて無いのに求人するのは普通にある
0729デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
アドレスを示す事がポインタの役目で何がポインタなのかは実装次第
0730デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
ポインタに値はあるべ。
0731デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
普通「ポインタ」っつったらアドレス値でありまたポインタ変数自体だわな。
それ以上の意味で使う事なんて無いから、めんどくさい定義なんていらん。
0732デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
ポインタにはアドレスだけじゃなくて型情報もいるんじゃねーの?
0733 ◆QZschizo.ptH 2013/08/30(金) NY:AN:NY.AN
>>716
>参照
気軽に使える単語ではない
0734デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
クズは黙ってろよ
0735デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
ひょっとして面接官はjavaやC#しか知らなかったのでは?
0736デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
>>732
型情報に関してはプログラマが責任を持つのが普通
0737デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
型情報ついてなきゃ計算できないじゃん。
0738デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
動的型ですらドキュメントに明示するというのに・・
0739デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
1と0の反転のスピードを論理的なビットに割り当てる事はできないんですか?
1ビットでも100ギアなら100ビットの情報を保持できることになりませんか?
こんな事考えた人いますか?
0740デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
qubitってやつか!
0741デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
>>739
シリアル通信のこと?
0742デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
>>739
原理的には可能じゃね? 情報を時分割して保持するって事だろ。
しかし仮に物理メモリ量が100分の一になったとしてメリット無いだろ。
計算速度は1/100になるし、100倍のメモリ積んだ方が安いし。
0743デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
>>742
そうですよね。速さは関係ないですか。
ではこういうのは無理ですか?
あ光コンピュータか。
0744デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
二重宣言されてる変数をデバッグ時に片方消すツールとかってありますか?
0745デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
>>744
ソ ー ス か ら 消 せ よ
0746デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
char* a;
char *a;
これってどっちが正しいの?
俺は上使ってるけど
0747デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
俺も上だけど下の方が多数派だと思う
0748デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
俺は下だけど、関数の返り値は上の方がいいのかな?
char* func() 
char *func()
どっち?
0749デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
char* a, b;
char *a, b;
0750デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
char* a;
char b;
0751デフォルトの名無しさん2013/08/30(金) NY:AN:NY.AN
何故int x,y;は分配法則が成り立つのに
char *a,b;は成り立たないのですか?
変数の違い?
■ このスレッドは過去ログ倉庫に格納されています