[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 06/01 04:04 / Filesize : 158 KB / Number-of Response : 656
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

なぜポインタで引っかかる人が多いのか



1 名前:デフォルトの名無しさん [2010/06/30(水) 10:22:47 ]
なぜポインタで引っかかる人が多いのか

引っかかる人は何に困惑しているのか


52 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 08:45:10 ]
たしかに何に使えるのかのイメージが湧かない
極力使わないように回避出来ちゃいそうな気もした

53 名前:デフォルトの名無しさん [2010/07/02(金) 08:51:15 ]
>>52
アセンブラのインデックスアドレッシングを拡張したもんだから、
ハード寄りのプログラミングでは必須。
目次なしでも辞書を引けないことはないが時間かかり過ぎ、というのと似ている。

54 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 10:19:27 ]
>>52
配列とインデックスを別々にすると変数や引数が多くなって気持ち悪い

55 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 14:00:22 ]
int *ip; int n=1;
ip += 1;
ip += n;
ip++;
上3つは全て等価だろうか?

int ia[10];int *ip = ia;
for(int n=0; n != 10; n++){
*ip + n = n;
ip[n] = n;
*(ip + n) = n;}
上3つは全て等価だろうか?

56 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 15:31:36 ]
>>55
そんなゴミみたいな例を出すからわからなくなる
大事なのはイメージ
物理メモリにおいてある領域にアクセスしようとしてる仕組みのイメージを
脳みそに描くことであって

そんな読みにくいコードが読めるかどうかはプログラムの能力とちっとも関係ない

57 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 15:36:43 ]
>*ip + n = n;
なんだこりゃ

58 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 15:45:08 ]
よくわかってない人間が、うっかりすると書いてしまうことがある。
だから、なぜ望んだ動作をしないのかわからず、引っかかるんだ。
読みやすい書き方を提示してやれば、ポインタで引っかかる人間は激減する。

59 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 15:57:07 ]
>>55
後半はバグっていて話にならない(>>57のとおり)
前半は何が聞きたいのかわからない。ポインタに1を足してるという点では等価だが、
評価順序とかアセンブラコードとか言い出したら等価ではないが、質問のポイントが書いていないので
答えようがない。

結論:>>55はど素人。引っ込んでろ。

60 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 16:05:36 ]
初期化してないものを演算するな



61 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 16:42:01 ]
>>60
上のはメモリに対する演算ではなく、ポインタの値を変化させてるだけだから、
参照してない以上、何も問題はない。

62 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 16:42:52 ]
>>59
いちいち罵倒せずにはいられんのか。情けない奴。

63 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 16:43:16 ]
ポインタ自体は説明すれば分かってくれる。
問題は表記だな。 Cのポインタ関連の表記が悪い。

64 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 16:47:22 ]
>>62
罵倒?
ど素人に引っ込んでろと書いたら罵倒なのか?
あんまり詳しくない方は書かないでもらえますか、とでも書けばいいのか?(ワラ

65 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 17:18:53 ]
>>63
でも代替案も却って煩雑だったりするし、
今更ポインタの文法が変わるわけがないので、
慣れてちょうだいとしか言いようがない。

一番いいのはC言語使わないことだけどね。

66 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 17:29:30 ]
>>64
バカを晒さないようお願い申し上げます。

67 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 17:31:08 ]
>>66
*ip + n = n;
とか書いちゃうバカに言われてもwwww

68 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 17:34:55 ]
>>67
それは私ではありません。横で見てて見苦しいので
重ねてバカを晒さないようお願い申し上げます。

69 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 18:09:39 ]
>>64
罵倒だとも。それがわからない程度の人間というわけでもあるまい?

70 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 22:53:16 ]
>>63
BASICにもVARPTRとかVARSEGとかあるけどCのポインタで躓く人には
分からないよ
アセンブラ学んだりしてメモリの存在意識してからじゃないと
スっと理解するのは難しいんだろうな
いきなりC言語から始めると値しか視界に入らないと思う



71 名前:デフォルトの名無しさん [2010/07/03(土) 02:29:03 ]
ジョエル・オン・ソフトウェア
bit.ly/8YScmk
">私のささやかな経験から言わせてもらうと、伝統的に大学のコンピュータ
サイエンスのカリキュラムで教えられているもので、多くの人がうまく理解
できないものが2つあった: ポインタと再帰だ。
"

72 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 03:28:48 ]
短縮URLなんて全くクールじゃねえから。ソースはきちんと示せ

73 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 09:06:42 ]
>>71
サンクス。クール内容だった。ポインタの理解が能力の見極めになるのはアセンブリ
言語を知らない人だけだろうな。知ってればレジスタ間接のようなものかですむ。逆に
アセンブリ言語知らなくてポインタを理解できる人は尊敬してしまう。どうやって理解に
至ったのかぜひ聞いてみたい。

74 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 09:16:19 ]
俺ほとんどアセンブリ言語知らないけどポインタは理解できたぞ。
はっきりいってポインタはアセンブリ言語知ってるどうのじゃなくて、
どういう型システムがあってああいう文法になるのかっていうことが
ポイントなんだと思うよ。

75 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 09:22:08 ]
再帰が理解できないって
高校数学で数列が理解できないレベルだろ
池沼認定

76 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 09:32:17 ]
アセンブラなんて知らなくてもポインタは理解できるだろ
大事なのは、いまいじってるデータが物理メモリのどっかにおかれていて
そこにアクセスする仕組みがポインタだと理解することだ

一番面倒なところはプログラムの記述といくらにらめっこしてても理解できないっていうところかなぁ?
概念を理解しないといけないってのは義務教育ではあまりないからな

再帰はツリー構造のデータをいじらせれば一発で理解できるから
そんなに重要じゃないと思うけどね
はじめに教える人間がタコだと苦労しちゃうのかも・・・

77 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 10:10:21 ]
>>74.,>>76
アセンブリ言語知らないと理解できないとは言っていない。知っていれば少しも
難しいものではないと言っている。ほとんど知らないとかではなくまったく知らない
人がどう理解していったのかを知りたい。そういう人を知らないので聞いてみたい。

78 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 10:18:39 ]
>>77
データはメモリにおいてあるんだからそこにアクセスする方法が必要になるだろ?
って必要にせまられたら一発で理解できたけど

画像とかさ
Aパートでロードした画像をBパートでもう一回使いたいんだけど?的な場面で

79 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 10:54:13 ]
>>77
俺も同意。
BASICから初めて、その後C言語をやった時はさっぱりだったが
情報処理試験のためにCASLをやったらあっさり理解できるようになった。

80 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 10:59:11 ]
配列とポインタの違いとかもアセンブラ知ってると理解が速いわな。

char *ptr;
char buffer[10];

_ptr: dc.l 0
_buffer: ds.b 10

puts(ptr);
puts(buffer);

move.l _ptr, -(sp) #ポインタを引数に渡す場合
jsr _puts
lea _buffer, -(sp) #配列を引数に渡す場合
jsr _puts
addq.w #8, sp



81 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 11:00:19 ]
むむっ久しぶりなんで間違えた予感。
>lea _buffer, -(sp) #配列を引数に渡す場合
こんなアドレス形式はないな。
pea _buffer
だった。失礼。

82 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 11:32:05 ]
テレビの中身を知らなくても、テレビを操作することはできる感じでポインタは使うことはできたけど
レジスタとメモリがどのように使われるのかを体感したら、理解が深まったのは覚えてる

83 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 11:39:38 ]
おまえらレベルの低いところで理解できたつもりになっててワロスw


84 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 11:43:11 ]
週末だというのに煽るしかやることがないなんて可哀想

85 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 11:45:29 ]
賞賛からはほとんど得るものはない
人間は失敗から学んで成長する生き物

86 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 12:09:03 ]
>>78
サンクス。
> データはメモリにおいてあるんだからそこにアクセスする方法が必要になるだろ?

それだとポインタを使わなくても普通にできることでは?

> 画像とかさ
> Aパートでロードした画像をBパートでもう一回使いたいんだけど?的な場面で

言語を限らないとメモリーコピー、参照渡しなどポインタを使わない方法もある。

意地悪く書いたけどポインタを使えていると思う。上から目線ですまぬ。

87 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 12:10:49 ]
> データはメモリにおいてあるんだからそこにアクセスする方法が必要になるだろ?

そこにアクセスする方法にアクセスする方法だろポインタっつーのは

88 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 12:28:38 ]
どうやって理解するも何もそのままだろうが

89 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 12:55:08 ]
理解出来ない奴が理解出来ない

90 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 13:09:57 ]
番号付き箱にモデル化されたメモリでの説明で理解した。
アセンブリは知らん。



91 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 13:17:40 ]
>>87
ポインタってそんなに複雑なものか?

>>80のコンパイル結果を見ればただの long 定数があるだけだ。
これがポインタの正体。つまりポインタは int や long と同じようにメモリ上にとられる
エリア。それをデータのアドレスを入れるために使う。

このプログラムはぬるぽになる。本来の意味でぬるぽが使えるのに感動!

92 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 13:39:23 ]
>>86
>それだとポインタを使わなくても普通にできることでは?
できねーだろ
ハンドル使ってもポインタは回避できないと思う

93 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 15:30:20 ]

知らないことは誰だってあるけど、いいやんとか言って違いも調べず思考停止するやつは向上心もう少し持とうぜ

94 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 15:32:03 ]
と、アンカーの使い方もわからない雑魚がいっております

95 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 16:12:00 ]
>>92
aというメモリー上のデータにアクセスしてbという変数に入れる。

b = a;

どこにポインタを使う必要がある?

96 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 17:23:29 ]
>>95
元の話題とまったくつながりが見えないんだけど
なんの話してるの?w

97 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 17:48:57 ]
>>95 は固定長データしか扱ったことないんだよ
そっとしておいてやれよ…

98 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 18:34:20 ]
アセンブリ言語を覚えたら
複雑な関数ポインタをスラスラ書けるようになっちゃうの?

99 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 18:35:38 ]
アドレスにまつわる文法はアセンブリの方がわかりやすいかもな

100 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 19:16:58 ]
>>96
>>87でポインタを使わなければデータにアクセスできないと書いているからそりゃ無い
だろと書いている。揚げ足取りに近いのだけど。
Cを使って大量のデータを使いまわしするということならポインタについてはそうだろう。
だから後に言語を限らなければとわざわざ書いている。

>>98
スラスラ書けるようになるかどうかはわからないがCでなぜポインタを取り入れたか、
何を実現したかったは理解できるようになる。



101 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 19:20:03 ]
>Cでなぜポインタを取り入れたか、
>何を実現したかったは理解できるようになる

それはポインタの理解とは無関係

102 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 19:43:06 ]
>>101
俺も同意見。

アセンブリ言語を理解したとして、
結局あの文法が正確に分かるようになるのかというと別だと思う。

たとえば、 const int (* const (*)(void))(void) なんてのがあったとしよう。
これはアセンブリ言語を知っていたとしても
ポインタ自体に精通していなければ文法上の
意味を正確に掴みかねると思われる。
裏でどういう値が動いているかは分かると思うが。

俺自身アセンブリ言語に詳しくないから
そう思うだけなんだけど識者の人はどう考えているの?

103 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 20:05:05 ]
ポインタで引っかかる人はアセンブリ言語を知っていれば簡単にわかる程度の
ところで引っかかっていると思うが。

104 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 20:28:40 ]
アセンブリの感覚だと、とりあえずvoid*にして後でキャストすればいいと思えるし
constはただの自己満足だとわかる。
必要最小限のサブセットと、自己満足のための高度な内容を分けて考えるべき。

105 名前:デフォルトの名無しさん [2010/07/03(土) 20:33:39 ]
int x=100;
int y=50;
int *p=&y;
int z=x/*p;

どうしてCはポインタの記号に*を採用したのか*/

106 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 20:41:22 ]
>>104
あくまで>>102は例だ。

本当に箱を並べたポンチ絵程度のものが分からないことを
アセンブリ言語を知っていれば分かるようになるのか、
それともC言語的な文法も踏まえたことをアセンブリ言語を
知っていれば分かるようになるのか、そういうことを言いたいだけ。

ポインタで引っかかるって言っても、
↑の2種類はいると思うけどね。

107 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 21:24:21 ]
ポインタと文法は別
ポインタはわかるが文法がわからないという話は聞いたことがない
だから文法自体は悪くない
悪いのは、文法以前で引っかかってる人に文法を踏まえさせること

108 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 21:35:36 ]
ポインタの配列とか
ポインタのポインタとか
配列のポインタとか
言ってる人は判ってるなと思うけど

ダブルポインタって言ってる香具師は
馬鹿じゃねーのと思う

109 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 21:45:18 ]
int **x; ←*が2つついてダブルポインタ

ではないの?

110 名前:108 mailto:sage [2010/07/03(土) 21:51:01 ]
そうだよ



111 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 22:03:07 ]
ポインタ自体は難しいと感じないんだけど

ポインタの配列、ポインタのポインタ
使うプログラムって難しく感じる
配列が多次元になったり
連結させたりするとな

112 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 22:09:25 ]
おまいら
int main(int argc, char *argv[]) を使う派?
それとも
int main(int argc, char **argv) を使う派?


113 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 22:12:32 ]
後者。引数のブラケットほど虚しいものはない。

114 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 22:13:55 ]
Javaですねわかります

115 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 23:05:50 ]
なぜJavaで引っかかる人が少ないのか

typedef void *Object;
typedef Object *Vector;
int main(int argc, Vector argv)

116 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 02:26:43 ]
*p=10000;

117 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 06:17:05 ]
めんどくさいときは構造体に入れて関数に渡すわ

118 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 06:20:21 ]
yes we can

119 名前:デフォルトの名無しさん [2010/07/04(日) 09:11:19 ]
int* p;
int *p;
int * p;

アスタリスクの使い方がポインタの理解を阻害する

120 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 09:23:31 ]
>>100
>>>87でポインタを使わなければデータにアクセスできないと書いているからそりゃ無い
>だろと書いている。揚げ足取りに近いのだけど。
は?>>87俺じゃねぇし
まったく話が見えない



121 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 09:50:02 ]
都合悪いから「俺じゃねぇ」ですね

122 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 10:05:01 ]
>>120
すまない。アンカー間違えてた。 >>78だった。
>>100のレスが無くても>>78にたどり着くので流れは分かると思うが分からないのなら
おれには説明できない。

123 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 11:29:50 ]
>>119
俺のポインタ周りの混乱はそうだったなぁ。
俺の混乱履歴。

 char *p;
char型の*pを宣言してるように見えてた。
 char i;
 i=1;
が正しいのだから、
 char *p;
 *p=1;
が正しくない理由が分からなかった。
加えて
 char *p="abcd";
こんな表現もあって混乱した。*pにいきなり値を代入してるように見えるから。
実際にはpに代入していて、char*型のpを宣言してるんだと感じてから、
 char* p;
と書くようにした。
そして
 char* p,r;
でまた混乱。

124 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 11:47:41 ]
意味を考えなくても文法知識をいじり倒すだけで正解を導けるという
思い込みのはげしい人が多いのはなぜか。

125 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:01:59 ]
規格書が全てですが何か

コンパイルできるかできないかはシンタックスが正しいか正しくないかであって実行して悪魔が出るかどうかはセマンティクスに違反しているかしていないか

ポインタなんて単なる数値だよ
*をいくつ使うかで表現できる階層が変わるだけ、C言語でオブジェクト指向っぽく連想配列でも実装すれば理解できるよ
ポインタは複合型であり、構造体や共用体、ポインタ、配列などの複合型の不完全型をシンプルに表現できる抽象データ型なだけであって難しいことなど無い

126 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:15:44 ]
Cを始めるにあたって、規格から調べる人は控えめに言ってマレでしょう。
普通は入門書や、入門webサイトを見る。
初めて見るソース、ソースから受ける第一印象はとても大事。

127 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:22:36 ]
難しいことを難しく表現することは誰にでも出来る。
難しいことをやさしく表現することは、能力が無いと出来ない。
能力が著しく足りないと、簡単なことを難しく表現してしまう。
という言葉を思い出した。

128 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:36:07 ]
>>119
C++ が普及する前の C のときは事実上
FILE *f;
だけだったはずで
FILE * f; とか
FILE* f; とか
書きかたしていると笑われたもんだ

なぜか C++ で本来の
HOGE *h;
は影を潜め
HOGE* h;
という書き方が横行するようになった

129 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:38:33 ]
 char* p,r;
でまた混乱。

なんで*が実質右ってことを忘れてんの?

130 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:39:47 ]
>>128

>>123 みたいなアホのせいだな pgrw



131 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:41:22 ]
>>123
> char *p;
>char型の*pを宣言してるように見えてた。

それで合ってる

何か変な本読んで混乱させられたんだな
かわいそうに

132 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:47:44 ]
ここは"なぜポインタで引っかかる人が多いのか"を考えるスレ。
初心者が起こす勘違いを考えるスレ。

133 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:57:03 ]
対象者が何につまずいているのかを想像する能力がなければ、
真の意味で教えることは難しい。
教える側に対象者のつまずきを理解する能力が無い場合、
対象者が理解できるかどうかは対象者の能力に依存する。

134 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:09:12 ]
>>133
そうだな
簡単な話が理解出来ないのは
耳が悪いのかも知れないし
そもそも話を聞いてないのかも知れないし
頭が悪いのかも知れない

135 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:17:00 ]
ポインタは正常に動くのにたまに変になることがある

int a[10];
a[10]=100;
みたいにやると、稀におかしくなる

コンストラクタとかifとかで複雑になってくると
よく見ると
int * p;
*p=100;
みたいなことを平然とやってたりする。
短いプログラムだとこんなことはしないだろうけど
複雑なプログラムだと初心者はわけがわからなくなる。

これが初心者にとって難しいんだろうな。

136 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:23:07 ]
>>135
> a[10]=100;
正常に動くことがあるから、誤解の種になるよね。
必ず異常動作すれば気づくんだが。

char *p="abc";
*p='A';
これが正常に動く環境があって、
しばらく平気でそういう記述してた時期があった。

137 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:30:53 ]
char* pの書き方だけは許さない。
こういう書き方をしている人物こそポインタで引っかかったままだと言える。

138 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:31:57 ]
>>137
Microsoftのソフト開発者は全員そうだな。

139 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:41:21 ]
結構、ポインタって文法の丸暗記で何とかなったりするからなぁ
int (*ptr)[10];
int a[100]; //mallocの代わり
ptr = (int (*)[10])a;
↑これを理解するのに結構時間かかった、特に関数の引数にしたときとか
アドバイスもらって、アセンブラ入門を勉強したら理解できるようになったんだよな
多分、実際のメモリ範囲確保とインデックスによるアドレス指定が理解の助けになったと思う

140 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:44:58 ]
>>137
char *p[10];
char (*p)[10];
*がpに付くのなら上記は同じ意味になるだろう。
*が宣言に付くからこそ(*p)とすることで違う意味になる。
そういう意味からは
char* p;
のほうがしっくり来る。
俺は char *p; と書くけどね、char* p0,p1; のことがあるからね。



141 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:46:46 ]
やたら記述にこだわってて内容理解してそうにない書き込みが多いところが恐怖

142 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:48:30 ]
C#では
int* p,q,r;
ってやったらpもqもrも
CやC++でいう
int *p,*q,*r;
みたいに、全部が*つけたようになるな
アンセーフモードでしか実行できないけどね

Microsoftのポインタに対する意識が明確に現れてるな

143 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:58:02 ]
>>126
第一印象に敏感な人は重症化しやすい、という意味では大事かもしれないが
本来は、印象なんてあやふやなものには鈍感なほうが良い

>>141
上のほうで、文法より意味を考えようぜっていう正論が出たから
逆の書き込みをすれば色々釣れるだろうと思ってるのかもしれん

144 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:58:46 ]
char *p;
char (*p);
上記は同じものを指すが、結果として同じものをさすだけであって、
その意味合いは異なる。
前者は"char*型のpの宣言"であり、
後者は"pはポインタであって、そのポインタはcharを格納するアドレスのポインタ"。
それが理解できなければ、
char *p[10];
char (*p)[10];
は理解できない。

145 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:03:27 ]
ホント記述弄り好きだな
こんなの覚えてもしょーがねーだろ

146 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:09:25 ]
>>145
しょうがなく無いぞ
char *p[10];
char (*p)[10];
どっちの意味でも使うことあるから。
宣言の*が型に付くことを知っていれば、
前者のpが配列、後者のpがポインタだと理解しやすい。

147 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:14:23 ]
int a[10][10];

148 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:19:29 ]
それは別にポインタが難しいからじゃなくて、C言語が難しいから。
文法云々というか、プログラマの責任がデカい部分。

149 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:23:31 ]
>>146
*(p[10]) か (*p)[10] かの違いだよ。前者の括弧は冗長だから書かないだけ。
*は前置単項演算子だから、被演算子は常に後ろに付く。型に付くことはない。

150 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:42:16 ]
なにいってるんだ

int * p
の*は演算子ですらないぞ

*p=&x
みたいのでpの←の*は演算子だけど。




151 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:47:48 ]
>149
知ったかは口はさむな

152 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:55:06 ]
説明する能力がなければ、真実を伝えることが難しい例。
説明する能力があれば、真実でなくても実質問題の無い考え方を伝えることが出来る例。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<158KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef