ポインタ地獄
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
NGNG0002名無しさんダーバード
NGNG00031
NGNGつまり「示す」という意味でしょうか?
0004名無しさん@お腹いっぱい。
NGNGギコ猫のプログラミング相談室に聞けと言うことです
0005名無しさん@お腹いっぱい。
NGNG0006名無しさん@お腹いっぱい。
NGNG0007名無しさん@お腹いっぱい。
NGNGそのアドレス情報をもつ変数がポインタです。
0008名無しさん@お腹いっぱい。
NGNG住所は他の箱の場所を指していたり、1つの箱の場所を覚えておいて、
そこから何番目までを記録に使ったりする。
言うのは簡単だけど概念的に理解できないと面倒なだよなあー。
0009名無しさん@お腹いっぱい。
NGNG初心者の内は理解しようと必死になるより馴れることに重点置いた方が良いんじゃない?
0010名無しさん@お腹いっぱい。
NGNG0011初心者さん@ポインタいっぱい。
NGNG0012名無しさん@お腹いっぱい。
NGNG0013名無しさん@お腹いっぱい。
NGNGただあのCの宣言の文法は腐ってると思う。
ちょっと半年くらい別の言語やってたりするとすぐわかんなくなる。
0014名無しさん@お腹いっぱい。
NGNG0015名無しさん@お腹いっぱい。
NGNG0016名無しさん@お腹いっぱい。
NGNGそのポインタ変数がまた別のポインタ変数を…
とかなってると、頭パンクしそうになるかもですねぇ。
自分、高校の授業で、8085のワンボードマイコンで
ハンドアセンブルとかやってて良かったですわ。
アレがあったから、コンピュータってどうやって動いてるのか
わかったような気がする。
そういう低レベルなところを理解できてれば、
ポインタうんぬんがわかんない、なんて事にはならないですな。
0017名無しさん@お腹いっぱい。
NGNG終了
0018名無しさん@お腹いっぱい。
NGNGポインタの何がわかってないんだかもわかってないようだ‥
人にきくなら、できるだけ具体的に
せめて簡単な事例を用意してきくように。
0019名無しさん@お腹いっぱい。
NGNGしかしどんな書き方だったらわかりやすいのかな?
0020名無しさん@お腹いっぱい。
NGNGこれだ!
0021名無しさん@お腹いっぱい。
NGNGうちは思わない。
0022優しい名無しさん
NGNGじゃなくて
int* a;
ならわかりやすくないかい?
0023厨房@C/C++暦○年
NGNG「A2」の様に、他のセルを参照しているセルはポインタ変数。
…では駄目ですか?
あくまで「例え」なんで間違ってる部分もあるとおもいますが。
0024名無しさん@お腹いっぱい。
NGNGint* a,b;
と書いちゃう人が増えるんだな。期待しているのは
int *a, *b;
なのに。
0025名無しさん@お腹いっぱい。
NGNG0026優しい名無しさん
NGNG頭の中で変数の実体とポインターがごっちゃになってる。
で気分次第で意味解釈が変わってきてた。
あと、ポインター宣言したら実体も同時にできていると思ってたり…。
だけど、がんぱってWinのアプリ一本作ってみたら、
なぜこれがわからなかったのかがわからなくなってた。
結局、文法書で終わってるとこがダメなんだよ。
文法はコンパイラと対話しながら学びなさい。
0027名無しさん@お腹いっぱい。
NGNG0028優しい名無しさん
NGNGそうですね。
いっぺん、Z80でもCASLでもいいから
文字列テーブルでも作ってプログラムの中で参照してみるといいかも。
0029名無しさん@お腹いっぱい。
NGNG0030名無しさん@お腹いっぱい。
NGNG0031名無しさん@お腹いっぱい。
NGNG0032名無しさん@お腹いっぱい。
NGNG値呼び出しが破綻しただけなら参照呼出しをちゃんとサポートすればよかったんだよ。
0033名無しさん@お腹いっぱい。
NGNGchar* const p;
はやはり
char *const p;
とかくのか?
0034名無しさん@お腹いっぱい。
NGNGがふつーだと思う。
0035名無しさん@お腹いっぱい。
NGNG0036名無しさん@お腹いっぱい。
NGNG0037名無しさん@お腹いっぱい。
NGNG意味的には
char (* (const p));
なんだから、char と * をくっつける強い必然性はない。
まぁ、const と p をくっつけるわけにはいかないから
char *const p;
または 34 さんのように
char * const p;
だろうな。
この場合も、
char a;
char*const p = &a, q;
とした場合など q の型が直感的には認識しづらい。
0038名無しさん@お腹いっぱい。
NGNG0039名無しさん@お腹いっぱい。
NGNGは?
0040名無しさん@お腹いっぱい。
NGNGconst char* const p;
とおっしゃりたいところでしょう(笑)。
つーか、やっぱこの*の位置キライなんだが。
C++がデフォになると(もうほとんどなってるが)
こっちが標準になっちゃうからなあ。
うー、どうしよう。うにゃにゃにゃにゃ。
0041名無しさん@お腹いっぱい。
NGNGメモリを動的に確保・廃棄したいから、であってますか?
0042名無しさん@お腹いっぱい。
NGNG0043>38
NGNG0044名無しさん@お腹いっぱい。
NGNGchar *p, *q;みたいに一行に何個も書くこと自体廃れてきた
ような気がする。それでいいと思う。
0045名無しさん@お腹いっぱい。
NGNGまーCの演算子解決順ってなんでもう少しわかり安くしてくれなかったんだろ。
いまだに*p++とか書くとき一瞬迷いが走るのは修行が足りない?
0046>Stroustrup先生
NGNGchar const * const * const * const p;
0047>46
NGNG004846
NGNGやなこった。
0049名無しさん@お腹いっぱい。
NGNGchar const* const* const* const p;
だろな。
>48
これは同感。ポインタをtypedefすると何か使いにくい。
0050名無しさん@お腹いっぱい。
NGNGがいいな。
0051どーでもいーことだが
NGNGでないの?
0052名無しさん@お腹いっぱい。
NGNG0053名無しさん@お腹いっぱい。
NGNGあとはキャストして使ってくれ。
0054名無しさん@お腹いっぱい。
NGNGchar ********************************************************pp = (char ********************************************************) p;
0055名無しさん@お腹いっぱい。
NGNG0056名無しさん@お腹いっぱい。
NGNG世界人類がこんな関数を作りませんように。
0057名無しさん@LV2
NGNGを始めて書いたときはめっさうけた^^
0058名無しさん@お腹いっぱい。
NGNGホンモノの地獄をみせてくれっ!!
0059名無しさん@お腹いっぱい。
NGNG* * *
* * *
***
* * *
* * *
*
よく見ると雪印っぽくて地獄。
0060名無しさん@お腹いっぱい。
NGNG多次元配列のポインタ教えて。
0061名無しさん@お腹いっぱい。
NGNG54にすでに40次元ぐらいのがあるだろ。
0062>60
NGNG006362
NGNG配列を構造体に入れてからtypedefしてポインタにすれば判りやすいよ
0064名無しさん@お腹いっぱい。
NGNG0065名無しさん@お腹いっぱい。
NGNGvoid (*signal(int, void (*)(int)))(int);
そんでもって、Cプログラマのまあ多分6割以上はこれを読めないというのが、
日本の悲しい現状。
0066名無しさん@お腹いっぱい。
NGNG0067>65
NGNGPASCALとかではどうかくの?
0068>67
NGNGchar *p;は var p:^Byte; です。
じゃ同じじゃないかと思われるでしょうが、参照渡しが使えるのと
absoluteで別名参照が出来るのと、そもそもクラスが参照なので
C程ポインタにお世話になるチャンスは少ないですね
0069>67
NGNG0070ぴか虫
NGNG/)_/) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,’ー’) < 適当に探してみたぞ。http://home1.infonia.ne.jp/~delphian/delphi/compo/graphmul.html#GM0047☆
_( U U) \____________________
0071名無しさん@お腹いっぱい。
NGNG0072名無しさん@お腹いっぱい。
NGNG0073名無しさん@お腹いっぱい。
NGNG確か、
main() {
goto togo; gototo: goto gogo; togo: goto gototo; gogo:
}
こんな感じのがあったような。
0074名無しさん@お腹いっぱい。
NGNG用件を聞こうか。
0075名無しさん@お腹いっぱい。
NGNG傍観してるのは面白いけど。
0076名無しさんi486
NGNG2chがコンタクトポイントだったのか
0077名無しさん@お腹いっぱい。
NGNG0078名無しさん@お腹いっぱい。
NGNGそれは Pascal というか Delphi の話だね。
0079名無しさん@お腹いっぱい。
NGNGmain()
{
int = 1;
loop:
printf("%d\n", i);
i = i + 1;
if (i <= 10) goto loop;
return 0;
}
うあああ。昔のBASICみたいだ。
0080名無しさん@お腹いっぱい。
NGNG{
printf("%d\n", ******************************************x);
}
0081名無しさん@お腹いっぱい。
NGNGconst が付いてないので減点。
0082名無しさん@お腹いっぱい。
NGNG0083名無しさん@お腹いっぱい。
NGNG0084名無しさん@お腹いっぱい。
NGNG0085名無しさん@お腹いっぱい
NGNG話しがずれてるような?
0086名無しさん@お腹いっぱい。
NGNG0087名無しさん@お腹いっぱい。
NGNGvoid (*signal(int, void (*)(int)))(int);
とかは、
typedef void TVIFunc(int);
typedef TVIFunc *TVIFuncPtr;
TVIFuncPrt signal(int, TVIFuncPtr);
とかみたいにtypedefしてくれるとわかりやすいと思う。
0089名無しさん@お腹いっぱい。
NGNGんで、おまえもできないんだろ(藁
0090名無しさん@お腹いっぱい。
NGNG一番最後の(int)っていうのは、
void (* 〜 )(int)
こうみるのね。
つまり、signalという関数の戻り値が
「「引数int 戻り値void の関数」へのポインタ」というわけです。
0091学生
NGNGでもせっかく気付いてもらったのに・・・ 分からんです。
今はもう一度みっちり勉強してまふ。
0092名無しさん@お腹いっぱい。
NGNGvoid ( *signal )( int )
でこれが
void ( *signal(int, void(*)(int)) )( int )
こうなると解りません
signalのあとから始まるかっこはどういう意味なんですか?
すみませんだれか教えて下さい
_(._.)_ _(._.)_ _(._.)_ _(._.)_ _(._.)_ _(._.)_
0093ネスティング
NGNGその関数は(int, void(*)(int))型の引数をとる。
引数内のvoid(*)(int)は、関数へのポインタ型。
この引数内の関数はintの引数をひとつとり、voidを返す。
その関数の返り値は関数へのポインタ型。
この関数はintの引数をひとつとり、voidを返す。
0094名無しさん@お腹いっぱい。
NGNGsignalは、引数にintとvoid(*)(int)を持ち、void ( * )( int ) の関数ポインタを返す関数だよ。
わかんなかったら素直にtypedefしろよ。
typedef void ( *tproc)( int );
tproc signal(int, tproc);
これで済むだろが。だぁほ!
0095名無しさん@お腹いっぱい。
NGNGそのsignalのあとから始まるかっこは関数を意味します。
名前の前につく*はポインタ、名前の後につく()は関数を意味するんだ。
このかっこの中にあるのは関数の引数なんで、さいしょは分けて考える。
*より()の方が結合が強いことに気をつけて。
*hoge()
は、*と()の両方がくっついてるけども
()の方が結合が強いので、hogeは関数。
{{hogeは関数}ポインタを返す}
てな感じで考える。一方
(*fuga)()
は、*と名前をかっこでくくってるから*の方を先に評価して
{{fugaはポインタ}関数への}
てな感じで考える。
で、問題の
void(*signal(int,void(*)(int)))(int)
なのだけども、
(*signal())()
として考えて、名前に近いほう(内側)から考えよう。
{signalは関数}ポインタを返す}そのポインタは関数への}
こんなんでわかってもらえたかな?
もちろん、自分で書くときはtypedefを使ったほうがいいね。
ちなみに、93は間違い。おしいけど‥
009693
NGNG009792
NGNG皆様解りやすい説明ありがとうございました
0098ホントにわかってるのか?
NGNG0099名無しさん@お腹いっぱい。
NGNG0100名無しさん@お腹いっぱい。
NGNG010192
NGNGtypedef tproc signal(int, tproc);
signal *psignal;
signal *psignal[5];
■ このスレッドは過去ログ倉庫に格納されています