- - PR -
C言語で初心者本を読んだ次の一手は?
投票結果総投票数:55 | |||
---|---|---|---|
ポインタを徹底的に | 47票 | 85.45% | |
コンパイル周辺を理解しろ | 3票 | 5.45% | |
関数群を叩き込め | 2票 | 3.64% | |
初心者本もう一冊? | 3票 | 5.45% | |
|
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-08-12 19:38
あ、すいません。何か勘違いしていましたでしょうか?^^; 上記の例だと、「a」が要素の先頭アドレスを指すので *(a+i) が同義になるのは理解できてますが…うーん。 | ||||||||||||
|
投稿日時: 2004-08-12 19:50
同義、というかコンパイラはa[i]を*(a+i)として扱う、ということです。 なので、2["abcde"]なんて書くことも可能です。配列そのものがCにおいてはシンタックス シュガーみたいなものなんですよね。 | ||||||||||||
|
投稿日時: 2004-08-12 20:29
う〜ん、「添え字演算子は演算の際に間接参照として展開するから」と書いたぐらいなんである程度は理解しているつもりなんですが…^^; 書き方が悪かったかもしれませんね。申し訳ありませんでした^^; ただ、uk様は配列…と言うよりは、添え字演算子の動作のお話をされているんじゃないかと思うんですよね。 2["abcde"] に関しても、"abcde"が要素の先頭アドレスを指し示すので今までの例と同じですよね? どちらかというと、私が言いたいのはポインタは配列とは違って、行き先を指し示す実体のないラベルのようなもの…ってことが言いたいんですよね。だから、「配列=ポインタ」と言うのは抵抗があるというか…。うーん、伝わらないでしょうか? すいません、あんまりうまく伝えられなくて…。 | ||||||||||||
|
投稿日時: 2004-08-12 23:35
有名なのはやっぱり「見た目がヘン」だからですよね。 「国際難解Cコードコンテスト以外では役に立たない」と言われて いますが、添字演算子がシンタックスシュガーであることを理解する 助けにはなる... のかな? | ||||||||||||
|
投稿日時: 2004-08-13 13:57
なるほど。どちらかというと「配列とポインタは似て非なるものである」というところに 引っかかったので、あのような表現になりました。Cではあくまでポインタありきで、 プログラミングを容易にするために配列がある、というのが私の考えです。
「配列=ポインタ」は間違いですね。「配列名は、配列の先頭要素を指すポインタ定数として 読み替えられる」ということですよね。 | ||||||||||||
|
投稿日時: 2004-08-16 19:05
え!そういう返答という事は、「ばってん」な訳ですね。 実は結構、自信があったのですが...流石はシロート りばぁさんのご指摘どおり、理由(2)が的外れだったんですね... って事で、実際にプログラミング実行しましたが、 上記の問題が解けません。うぇぇぇん。 対応点: ・ソースにinclude定義で stdio.h stdlib.h string.h を追加。 ・AllocBuffuer( pBuffer, 20 ); の関数名をAllocBufferに訂正 動く... 多分、動きはするが危険性を含む構成かな?と思い見直しましたが、解らずです。 <追記> ヌルポインタの言葉の意味を間違えて違っていました...失礼いたしまいた。 | ||||||||||||
|
投稿日時: 2004-08-16 19:47
動きましたか。じゃあ char* pBuffer = NULL; とやっとくとどうなりますか?
動く可能性はあるけど、たいてい動かないと思います。 | ||||||||||||
|
投稿日時: 2004-08-16 23:00
ありがとうございます。問題が解けました... がるがるさんのを直利用すると ×AllocBuffer( pBuffer, 20 ); ↓ ○AllocBuffer( &pBuffer, 20 ); ×pBuffer = malloc( size ); ↓ ○*pBuffer = malloc( size ); ですね。(メモリ解放は省略)
上記を追記すると[(Null)]と表示され、一瞬意味不明でしたが、 各箇所に下記を追記して納得です。
多分、 Windows98だから(メモリ保護が弱いから)すんなり動いたのかな? #編集:%のフォーマット指定を勘違いしていた... [ メッセージ編集済み 編集者: はにまる 編集日時 2004-08-17 00:05 ] |