【訃報】C言語およびUNIXの父、デニス・リッチーさんが死去 -享年70

このエントリーをはてなブックマークに追加
952名無しさん@12周年:2011/10/15(土) 01:14:23.49 ID:827QMXLM0
>>949
今となっちゃね
953名無しさん@12周年:2011/10/15(土) 01:14:33.20 ID:D5kawlUA0
規約で変数を意味のある単語3文字以上ってなってても
ループカウンタは例外としてi, j k, ...としてよいってなってることが多いはず。

なんでそうするか。ループカウンタ変数は慣習があるから、
そのほうがみんな理解しやすいから。
954名無しさん@12周年:2011/10/15(土) 01:14:31.88 ID:HNhqivq50
>>938
i以外は使いたくないな。
もう指が勝手ににループカウンタはiと打ってしまうので2重以上のループで必ず間違える。
955名無しさん@12周年:2011/10/15(土) 01:14:41.41 ID:7M/rhFW90
>ポインタ=箱のアドレスをもつ変数
ポインタはポインタ演算ができるから、
「箱のアドレスをもつ変数」だけだと、ポインタ演算をみると分からなくなってくる。

956名無しさん@12周年:2011/10/15(土) 01:14:49.59 ID:iQYjvlpuO
>>943
俺もチャー派。
intはイント、charはチャー。
957名無しさん@12周年:2011/10/15(土) 01:14:48.86 ID:NDcOpq0Y0
>>916
char はチャーじゃない、キャラクタだ
atof はアトフじゃない、アスキーToフロートだ
pow はポウじゃない、パワーだ
958名無しさん@12周年:2011/10/15(土) 01:14:49.90 ID:lVLUS6Uj0
K&R 最高や
959名無しさん@12周年:2011/10/15(土) 01:15:04.68 ID:D2hvZuQi0
>>952
今となっては読む価値がないってよく聞くけどねw
960名無しさん@12周年:2011/10/15(土) 01:15:26.98 ID:cjjup/QR0
キムチ&R・・?
961名無しさん@12周年:2011/10/15(土) 01:15:53.60 ID:WuRG0fqL0
素人は、while ( 1 )
玄人は、for ( ;; )
962名無しさん@12周年:2011/10/15(土) 01:16:20.68 ID:HNhqivq50
>>934
Eclipseなら複数行選択となんかのショートカット一発で変換できたと思う。忘れたが。
963出世ウホφ ★:2011/10/15(土) 01:16:29.69 ID:???0
次スレどうぞ

【訃報】C言語およびUNIXの父、デニス・リッチーさんが死去 -享年70★3
http://raicho.2ch.net/test/read.cgi/newsplus/1318608961/l50
964名無しさん@12周年:2011/10/15(土) 01:16:29.78 ID:/UWdfF/JP
>>944
次の箱を調べるためには、箱の大きさが必要だよな。
ポインタはポインタを1増やすだけで次の箱を指し示してくれる。
965名無しさん@12周年:2011/10/15(土) 01:16:49.20 ID:MKVrq8gk0
>>955
すまんポインタ演算って何・・?
やっぱC言語むずかしくね?
966名無しさん@12周年:2011/10/15(土) 01:17:25.60 ID:D5kawlUA0
>>944
箱の一つ一つにはアドレスが振ってあって、
箱を一まとめに扱いたいときに配列とみる。
見方の違いと考えればよいのでは。

で、配列として使うときには先頭と終端が分かればよいので、
先頭を指すアドレス(=ポインタ)が配列と思えばわかるかな?
967名無しさん@12周年:2011/10/15(土) 01:18:03.73 ID:LNlpxXAt0
スレを見直して、ちょっと思うんだが何でポインタが難しいと思う人間が
居るのか全く判らない

逆アセンブルして見れば、一発で理解出来ると思う

WinでもMacでも概ね
何らかのカーネル上で動作するコードでのポインタは物理アドレスではない
あれは、論理アドレス(ページアドレスと表現する場合もある)
968名無しさん@12周年:2011/10/15(土) 01:18:06.89 ID:AtW2OB4w0
>>961
昔読んだ linux のカーネルの init() の最後はそうなってたような。
969名無しさん@12周年:2011/10/15(土) 01:18:16.75 ID:WLd5VCN2P
char *pのpは変数で
char p[]のpは定数
970名無しさん@12周年:2011/10/15(土) 01:18:30.92 ID:AtCaeZCu0
>>961
ネタといことで1つ

#define T_T ;;
#define ever (;;)

for (T_T) { }

for ever {

}
971名無しさん@12周年:2011/10/15(土) 01:18:52.31 ID:ZjeP/vdn0

>>949
偉い高僧がIT土方のために描いてくれた地獄極楽図だと思え
972名無しさん@12周年:2011/10/15(土) 01:18:55.28 ID:aiZFTsjM0
>>959
まぁ古いし

ある程度マスターした後に目を通すと今までの見落としが見つかることもあるから
全くの無価値ではないけどね
973名無しさん@12周年:2011/10/15(土) 01:19:31.99 ID:+A251f9B0
>>948
今はどうだか知らんが、昔のコンパイラだったら、たとえば2行目を
for(ii = 0; ii < 10; iii++){
…って書いちゃっても通しちゃんじゃないか?
カウンタは i、j、k で十分だ
974名無しさん@12周年:2011/10/15(土) 01:19:49.78 ID:NDcOpq0Y0
>>944
ポインタに対する演算ができるからだよ
intの変数hogehoge を指すポインタ変数があるとして、そのポインタの参照先はhogehoge
そのポインタ変数+1の参照先はhogehogeの次の領域に存在するintのデータ
この「+1」のところを配列の添字と同じようなものだと見なせるから
975名無しさん@12周年:2011/10/15(土) 01:19:55.60 ID:oY7Ek/zw0
>>969
いや、如何考えても下のpも変数だろ。
[]は配列じゃなくポインタの別記法
976名無しさん@12周年:2011/10/15(土) 01:20:03.55 ID:D5kawlUA0
>>972
でも昔は、「Cを学習するならこの本」的な扱いだったよね。
それで自信なくしたひとも多い、はずw
977名無しさん@12周年:2011/10/15(土) 01:20:33.96 ID:GCJFz9ea0
お世話になりました。まるで役立てられていませんが。
978名無しさん@12周年:2011/10/15(土) 01:20:34.15 ID:62qx/0SX0
>>961
一般的にfor→whileって感じで学習すると思ってたから、
それで自然だと思ってた。それが先祖返りするのか…
979名無しさん@12周年:2011/10/15(土) 01:20:53.16 ID:HNhqivq50
0000H 〜FFFFHなんて64KBメモリにアセンブラでメモリを読み書きしていた少年時代があるとないとでは
ポインタの理解も違うのかな。
980名無しさん@12周年:2011/10/15(土) 01:21:13.90 ID:aiZFTsjM0
>>976
そりゃ昔の C 言語書籍といえば嘘を平気で書くデタラメ書籍が多かったから
「書いてあることはすべて正しい」という一点で評価されていた
981名無しさん@12周年:2011/10/15(土) 01:21:19.31 ID:827QMXLM0
>>973
それ今のコンパイラでも通る
982名無しさん@12周年:2011/10/15(土) 01:21:26.73 ID:s8So7bOl0
第1版と第2版、両方持ってた。ちょうど大学2年のときに第2版が
でたんだよな。あれから20年。。。
983名無しさん@12周年:2011/10/15(土) 01:21:45.27 ID:MKVrq8gk0
>>969
それだ、そんなことを会社の先輩が言ってた
ただし変数定数がなにを意味すんのかがわかんねえorz
984名無しさん@12周年:2011/10/15(土) 01:21:50.69 ID:qc4oV2dR0
おまえらif文使う時

if (a==0) {
   b = 1;
}

って書く? それとも

if (a==0)
{
   b = 1;
}

って書く?  
俺、後者だけど(つうか会社のサブセットがそうなっていた気が・・・)
985名無しさん@12周年:2011/10/15(土) 01:22:11.01 ID:iQYjvlpuO
>>975
いや、下のpは定数だよ。
986名無しさん@12周年:2011/10/15(土) 01:22:44.96 ID:D5kawlUA0
>>979
アドレス=住所、的な教え方されてると、
「東京都渋谷区云々」みたいなイメージもってしまうから
ポインタ演算ってなんのこと、ってなるかもね。
987名無しさん@12周年:2011/10/15(土) 01:22:53.38 ID:GOOuMbt/0
>>970
#define begin {
#define end }

for (;;)
begin
 ほげほげ
end
988名無しさん@12周年:2011/10/15(土) 01:22:57.32 ID:nDSmN/Zv0
32bitx32bit演算で64bitを受け取れる言語仕様にして欲しかった。
割り算も、整数部と余り両方が欲しい。
TEST AND SET命令も無い。
989名無しさん@12周年:2011/10/15(土) 01:23:21.14 ID:gy8+w/OR0
ポインタって「入れ物」とか「指し示す」とか言うから初学者はわけわかめなんじゃないかな。
具体的なイメージが浮かばないから結局理解できない。
0x00

------------------------------------
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
------------------------------------
ノートにこんな感じでメモリマップ書いて追いかければいい。
ある程度理解できればlibcのソースでも現場のソースでもみて
**が何の意図で使われているか考えてみろ。
990名無しさん@12周年:2011/10/15(土) 01:23:33.36 ID:Si8pnRD10
CとC++とC#の違いがわからない
991名無しさん@12周年:2011/10/15(土) 01:23:36.62 ID:nXMqBg7G0
>>911
例題

char a[10][10];

int main(int argc,char *argv[])
{
/* 配列の要素に1を入れる */
InsertArray(0, 0, 1);

/* 配列の要素に何かを入れる(POINTER) */
Insertpointer(&a[0][0], 1);
}

void InsertArray(int x, int y, char value)
{
a[row][column] = value;
}

void Insertpointer(char *p, char value)
{
*p = value;
}

配列で扱う型がcharとかの基本型だったら、そのまま配列のx,yで使用したほうが分かりやすい
ただし、配列の各要素が構造体になりそうだったら、各区要素へのアクセスはポインタのほうが
扱いやすいかも

要するに、いずれかの選択肢があることを知っておくことが重要
992743:2011/10/15(土) 01:23:38.77 ID:lQWcwjTn0
マイクロソフトのコーディング規約で変数名の先頭に型を表す文字をつけろというやつ。
たとえばint型の変数には i を付けるとか。
アホかと
型を変更したときに修正が大変だし、万一、型が間違ってたらまずいだろ。
変数の型くらいdefine文で常に確認しろって。
993名無しさん@12周年:2011/10/15(土) 01:23:42.26 ID:827QMXLM0
>>984
前者だが、Visual Studioとかだと勝手に後者になるな
994名無しさん@12周年:2011/10/15(土) 01:23:49.96 ID:NhtJ07USP
>>941
コンピューターのデータ操作はポインタ操作が基本中の基本だからねぇ。

>>967
最近はアセンブラ読めない奴結構いるんだよね。ソース&アセンブラの
ミックスモードデバッグとかもしないのかな。
今時のOSで仮想アドレッシング使わないOSって無いからな。
995名無しさん@12周年:2011/10/15(土) 01:24:05.09 ID:WLd5VCN2P
>>975
上はp=(char *)0;が通るが下はエラーになる
996名無しさん@12周年:2011/10/15(土) 01:24:12.45 ID:62qx/0SX0
>>990
C#=Java
997名無しさん@12周年:2011/10/15(土) 01:24:28.16 ID:s8So7bOl0
>>973
iiiの定義をしてなかったらエラーになるだろ。Perlじゃあるまいし。
998名無しさん@12周年:2011/10/15(土) 01:24:34.26 ID:iQYjvlpuO
>>985
しまった。サイズ不定だから配列じゃないや…

orz
999名無しさん@12周年:2011/10/15(土) 01:24:42.71 ID:NDcOpq0Y0
>>981
定義されていない変数でも?
1000名無しさん@12周年:2011/10/15(土) 01:24:56.31 ID:D5kawlUA0
>>983
定数って、定義後に変更できないんだよ。
変数って、値を変更したければ代入しなおせばいいけどねw
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。