【訃報】C言語およびUNIXの父、デニス・リッチーさんが死去 -享年70
953 :
名無しさん@12周年:2011/10/15(土) 01:14:33.20 ID:D5kawlUA0
規約で変数を意味のある単語3文字以上ってなってても
ループカウンタは例外としてi, j k, ...としてよいってなってることが多いはず。
なんでそうするか。ループカウンタ変数は慣習があるから、
そのほうがみんな理解しやすいから。
>>938 i以外は使いたくないな。
もう指が勝手ににループカウンタはiと打ってしまうので2重以上のループで必ず間違える。
>ポインタ=箱のアドレスをもつ変数
ポインタはポインタ演算ができるから、
「箱のアドレスをもつ変数」だけだと、ポインタ演算をみると分からなくなってくる。
956 :
名無しさん@12周年:2011/10/15(土) 01:14:49.59 ID:iQYjvlpuO
>>943 俺もチャー派。
intはイント、charはチャー。
>>916 char はチャーじゃない、キャラクタだ
atof はアトフじゃない、アスキーToフロートだ
pow はポウじゃない、パワーだ
K&R 最高や
>>952 今となっては読む価値がないってよく聞くけどねw
キムチ&R・・?
素人は、while ( 1 )
玄人は、for ( ;; )
>>934 Eclipseなら複数行選択となんかのショートカット一発で変換できたと思う。忘れたが。
963 :
出世ウホφ ★:2011/10/15(土) 01:16:29.69 ID:???0
>>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 箱の一つ一つにはアドレスが振ってあって、
箱を一まとめに扱いたいときに配列とみる。
見方の違いと考えればよいのでは。
で、配列として使うときには先頭と終端が分かればよいので、
先頭を指すアドレス(=ポインタ)が配列と思えばわかるかな?
スレを見直して、ちょっと思うんだが何でポインタが難しいと思う人間が
居るのか全く判らない
逆アセンブルして見れば、一発で理解出来ると思う
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は定数
>>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土方のために描いてくれた地獄極楽図だと思え
>>959 まぁ古いし
ある程度マスターした後に目を通すと今までの見落としが見つかることもあるから
全くの無価値ではないけどね
>>948 今はどうだか知らんが、昔のコンパイラだったら、たとえば2行目を
for(ii = 0; ii < 10; iii++){
…って書いちゃっても通しちゃんじゃないか?
カウンタは i、j、k で十分だ
>>944 ポインタに対する演算ができるからだよ
intの変数hogehoge を指すポインタ変数があるとして、そのポインタの参照先はhogehoge
そのポインタ変数+1の参照先はhogehogeの次の領域に存在するintのデータ
この「+1」のところを配列の添字と同じようなものだと見なせるから
>>969 いや、如何考えても下のpも変数だろ。
[]は配列じゃなくポインタの別記法
976 :
名無しさん@12周年:2011/10/15(土) 01:20:03.55 ID:D5kawlUA0
>>972 でも昔は、「Cを学習するならこの本」的な扱いだったよね。
それで自信なくしたひとも多い、はずw
お世話になりました。まるで役立てられていませんが。
>>961 一般的にfor→whileって感じで学習すると思ってたから、
それで自然だと思ってた。それが先祖返りするのか…
0000H 〜FFFFHなんて64KBメモリにアセンブラでメモリを読み書きしていた少年時代があるとないとでは
ポインタの理解も違うのかな。
>>976 そりゃ昔の C 言語書籍といえば嘘を平気で書くデタラメ書籍が多かったから
「書いてあることはすべて正しい」という一点で評価されていた
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
986 :
名無しさん@12周年:2011/10/15(土) 01:22:44.96 ID:D5kawlUA0
>>979 アドレス=住所、的な教え方されてると、
「東京都渋谷区云々」みたいなイメージもってしまうから
ポインタ演算ってなんのこと、ってなるかもね。
>>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命令も無い。
ポインタって「入れ物」とか「指し示す」とか言うから初学者はわけわかめなんじゃないかな。
具体的なイメージが浮かばないから結局理解できない。
0x00
↓
------------------------------------
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
------------------------------------
ノートにこんな感じでメモリマップ書いて追いかければいい。
ある程度理解できればlibcのソースでも現場のソースでもみて
**が何の意図で使われているか考えてみろ。
990 :
名無しさん@12周年:2011/10/15(土) 01:23:33.36 ID:Si8pnRD10
CとC++とC#の違いがわからない
>>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で使用したほうが分かりやすい
ただし、配列の各要素が構造体になりそうだったら、各区要素へのアクセスはポインタのほうが
扱いやすいかも
要するに、いずれかの選択肢があることを知っておくことが重要
992 :
743:2011/10/15(土) 01:23:38.77 ID:lQWcwjTn0
マイクロソフトのコーディング規約で変数名の先頭に型を表す文字をつけろというやつ。
たとえばint型の変数には i を付けるとか。
アホかと
型を変更したときに修正が大変だし、万一、型が間違ってたらまずいだろ。
変数の型くらいdefine文で常に確認しろって。
>>984 前者だが、Visual Studioとかだと勝手に後者になるな
>>941 コンピューターのデータ操作はポインタ操作が基本中の基本だからねぇ。
>>967 最近はアセンブラ読めない奴結構いるんだよね。ソース&アセンブラの
ミックスモードデバッグとかもしないのかな。
今時のOSで仮想アドレッシング使わないOSって無いからな。
995 :
名無しさん@12周年:2011/10/15(土) 01:24:05.09 ID:WLd5VCN2P
>>975 上はp=(char *)0;が通るが下はエラーになる
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
1000 :
名無しさん@12周年:2011/10/15(土) 01:24:56.31 ID:D5kawlUA0
>>983 定数って、定義後に変更できないんだよ。
変数って、値を変更したければ代入しなおせばいいけどねw
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。