1 ななしのよっしん
2008/08/11(月) 08:25:53 ID: TL/vA4ecWJ
ポインタ変数」はCやC++における特徴的な概念かもしれないけど、
ポインタ自体の概念を持っていない言ってのはあまりないと思う。
例えば、参照変数ってのは対し示しているという意味でまんまポインタなわけで、JavaにもC#にもポインタは存在するって言えるじゃないかな。

若干理屈気味ではあるけど
👍
高評価
0
👎
低評価
0
2 yamashita
2008/08/11(月) 09:29:20 ID: SU2dHucjW0
>>1
摘痛み入ります。
ただ、ポインタポインタ変数し示す用として使われている(例:XXポインタが使えない)ようなケースも見られるので、このような形ではいかがでしょうか。
👍
高評価
0
👎
低評価
0
3 ななしのよっしん
2008/08/12(火) 01:17:20 ID: 3C0LKLWSZX
わかりづらいのはポインタ変数の表現形式であって、ポインタ概念そのものは明快だと思う。
ループGOTOで表現するとわかりづらくなるのといっしょ。
👍
高評価
0
👎
低評価
0
4 ななしのよっしん
2008/08/12(火) 01:22:04 ID: 4a8XecGm0O
ポインタポインタまでは追えるけど、ポインタポインタポインタ以上になるとイラっときますw
👍
高評価
0
👎
低評価
0
5 ななしのよっしん
2008/08/13(水) 01:00:27 ID: yPxoK1kjYk
Javaユーザが参照のことを「ポインタ」と呼ばれるの(概念の説明の際も含めて)を嫌うのは、
ポインタとは加減算が許されている値なので不正な領域をしうる」
Javaの参照には演算が許されていないのでCのポインタより安全である」
という確固たる信念(……と言っておく)が根底にあるのかなと愚考。

まだ可燃性の高い議論なのかな、これ。
👍
高評価
0
👎
低評価
0
6 ななしのよっしん
2008/08/13(水) 01:04:54 ID: YJdq1b2ibc
>>5
Javaで参照といわず、わざわざポインタというとVM実装の話か?
と思ってしまう。
👍
高評価
0
👎
低評価
0
7 ななしのよっしん
2008/08/13(水) 01:33:51 ID: 8Rwvs/nm5w
 私はCでポインタ変数の加算減算と配列表記を使い分けています。

&i[1]とi + 1
この二つは同じ意味でも、わざわざ参照してポインタを取っている分前者の方がわずらわしい作業に見えて仕方なかったり。
ただどちらの形で書いても多くのコンパイラでは配列外のメモリアクセス出来る事に違いはありませんし。正直ポインタ変数を使わなくても同じ動作をするプログラムは作れるのですが、配列の先頭アドレスを移動させるような事が……
 はい、確かに経験浅いです私。

ちなみにC#でも一応ポインタ変数は扱えます。使った事いですが。
👍
高評価
0
👎
低評価
0
8 ななしのよっしん
2008/08/15(金) 09:42:15 ID: 9BckrtPi1M
これももうすぐポインターになるのかな?
👍
高評価
0
👎
低評価
0
9 ななしのよっしん
2008/10/18(土) 19:38:51 ID: 8Rmv4/4fYi
int *pa
👍
高評価
0
👎
低評価
0
10 ななしのよっしん
2010/02/11(木) 19:43:19 ID: qhsjX+LeFZ
変数宣言の時の「int *pointer」
変数の値を参照するときの表現「*pointer」
この2つが話をややこしくしている犯だと思うんだ

変数宣言は「int* pointer」のように*をの方にくっつける
 1行で複数のポインタを宣言しないルールがあれば
    int* pointerA, pointerB;
 みたいな悲劇も防げてベネ
ポインタだけは例外的にシステムハンガリアン記法を使う
Visual Studioのようなリッチな環境で作る
とすれば若干マシになるけれども…
👍
高評価
0
👎
低評価
0
11 ななしのよっしん
2010/07/15(木) 02:08:41 ID: aSiVzy5CrS
構造体の中にchar変数配列array[]にポインタ演算子つけて文字
列"abc"表示するソースがあったとして文字列にはアドレスがあって文字
値にもなってあれ?文字列が格納されてる変数がない?でも文字列の名前
アドレスを表しててポインタアドレス代入してなくてわかんないからまあ
いいや。でもprintf(array[])ってデバックしてみたらあ!そうか文字
って配列なんだ。え?違うてか配列文字列が代入されててそれでポインタ
でけれどポインタいつ代入したのかなと思ったけどもう最初に初期化されて
ポインタだから文字列をしててでもcharで1バイトで1バイトなのに文字
列っておかしいでもポインタだから嗚呼嗚呼ああああああああああああああ
ああああ
👍
高評価
0
👎
低評価
0
12 ななしのよっしん
2011/05/22(日) 02:13:43 ID: mYG1CqlKoi
おい、白菜ポインタIKKOポインタいとはどういうことだ
👍
高評価
0
👎
低評価
0
13 ななしのよっしん
2011/08/26(金) 12:57:11 ID: MUx/tuX7Y1
int arrays[10];
int* pointer = &arrays[0];
は別の書き方で
int* pointer = arrays;
と同じです。
👍
高評価
0
👎
低評価
0
14 ななしのよっしん
2011/08/27(土) 22:34:30 ID: LlviXN16q6
ポインタ引数くらいにしか使ってないわ
👍
高評価
0
👎
低評価
0
15 ななしのよっしん
2011/12/03(土) 16:51:01 ID: osXoxcL6Gk
RPGツクール2000の「変数番号変数」と同じかな?
👍
高評価
0
👎
低評価
0
16 ななしのよっしん
2013/10/09(水) 20:51:14 ID: DKqoyQil+L
ウルトラセブンポインター号が抜けてる。それとレ「イ」ザーポインタよりレ「ー」ザーポインタの方が字面としてはしっくりくるな。
👍
高評価
0
👎
低評価
0
17 ななしのよっしん
2013/10/21(月) 14:57:39 ID: 4jEBwznN4V
ポインタって要するに
実際のデータメモリアドレスを格納してる(orする)変数
ってことでおk
👍
高評価
0
👎
低評価
0
18 ななしのよっしん
2013/11/04(月) 17:40:51 ID: LhyvYfmvxO
>>17
メモリアドレスだけでなく「情報も一緒に持ってる
例えばインクリメントやデクリメントするとき、そのデータメモリ上で占めるサイズに合わせたアドレス移動ができるのは情報も持ってるから
👍
高評価
0
👎
低評価
0
19 ななしのよっしん
2015/10/06(火) 02:33:07 ID: c/XWukpYXi
>C言語初心者が挫折しやすい概念
・・・という触れ込みが必ず出てくるのだけど、多重ポインタでややこしいケースをのぞけばポインタ自体が難しいとは思えんのよね。ポインタができない人は根本的に低レベルべったりのC言語をよく分からず使ってるだけだと思う。
👍
高評価
0
👎
低評価
0
20 ななしのよっしん
2015/10/12(月) 13:26:19 ID: pnJYHCDwQc
コンパイルエラーと実行時エラーの区別すらつかない初心者
エラーメッセージしで強制終了・ハング・意味不明な挙動にぶつかった時に
原因も対処法もわからなくてお手上げになるんだよ

そこからもう一歩踏み込んで初めてポインタとの戦いになるんだよ
👍
高評価
0
👎
低評価
0
21 ななしのよっしん
2015/12/23(水) 20:36:51 ID: Wkdi5Ha6HN
近代的な言しか知らないに、システマティックなメモリ思考を身に着けてほしいという意味をこめて「Cをやれ」と言う人は多い
でもそれは逆も言えていて、Cしか知らない変態としてのCの成分(ポインタ周りの記法)を頭から抜くために一度Javaか何かをやるべき
👍
高評価
0
👎
低評価
0
22 ななしのよっしん
2016/07/17(日) 18:36:05 ID: g2q64jYKCX
組み込み系触ればポインタとか一発だろと思わなくもない
ハードウェア上でのやり取りを理解せずにプログラム触るから理解できないだけだよ
まあその辺り意識しなくても書けちゃったりするしな(処理時間は別として)
👍
高評価
0
👎
低評価
0
23 ななしのよっしん
2016/11/01(火) 15:16:30 ID: KVOpdE3qY8
ぶっちゃけポインタより再帰で挫折してる気がする
👍
高評価
0
👎
低評価
0
24 ななしのよっしん
2017/01/29(日) 22:54:47 ID: Wkdi5Ha6HN
再帰とかお願いだから挫折したままいてくれ
習得せんでいい
👍
高評価
0
👎
低評価
0
25 ななしのよっしん
2017/04/30(日) 01:27:19 ID: c/XWukpYXi
再帰程度理解できないやつにプロとして仕事してほしくない。
👍
高評価
0
👎
低評価
0
26 ななしのよっしん
2017/12/07(木) 09:05:58 ID: YKDime+395
「"int* ptr" が正規表現。"int *ptr"は許容表現。」
って言えば、初心者がつまずくことなんてなくなるんだろう
intint*の違いだと説明すりゃほとんどの子は納得する

int*には、intが占有するメモリアドレスが入る」
int x;//int変数x
int* ptr;//int*変数ptr
ptr=&x;//ptrにxのアドレスを代入

「現アドレス上を操作するときはポインタ変数にして行う」
*ptr=5;//ポインタptrに5を代入(これはx=5と同義)

これなら中学生でも余裕でいける
👍
高評価
0
👎
低評価
0
27 ななしのよっしん
2017/12/07(木) 10:36:08 ID: YKDime+395
>>25
再帰は直感的に理解しやすいが正確な値を内演算しづらいデメリットがあるからなぁ
それならforループで同じ処理すりゃ読みやすいだろって話じゃないかな>>24が言いたいことは

消費メモリ節約できるとかいう具体的なメリットがないなら慣れしんだ表現のが好ましいよ
👍
高評価
0
👎
低評価
0
28 ななしのよっしん
2018/06/27(水) 19:21:18 ID: wIv8gWIWxx
>>26
int* が本来正しい表現だったんだけど、
例えば3つ宣言するときとかいちいちint*を書くの面倒だから
変数名の前に書いてもOKになってます、でいいのかしら。
👍
高評価
0
👎
低評価
0
29 ななしのよっしん
2018/11/07(水) 21:37:22 ID: mIU2hA7IUv
10年経っても理解できない
👍
高評価
0
👎
低評価
0
30 ななしのよっしん
2018/12/04(火) 20:10:40 ID: c/XWukpYXi
>>28
すべてはCのポインタ宣言がアレなせいだと思われる。
int* a,b;
と宣言した時、これはint*2つではなく、int* a と int bと解釈する。だからポインタ2つを宣言したければ int* a, * b; とするしかない。とはいえ* bの空白キモいので*bにしたくなるのが人情で、こうなると心理学的に言っても *a もそれにえたくなる。
ということで、構文上は変数の方に * が付くのが自然と理解せざるを得ないorz

現実に出回っているAPIリファレンスなどを見ても*は変数側につくのが当たり前で、の側に付けてるものはほぼ見ない。関数引数が個別だからそうしなくてもいいんだけど、もうどうしようもないとしか。
ちなみにだが、これを反省してちゃんと int* にしたのがD言語
👍
高評価
0
👎
低評価
0