ポインタはどうやって学ぶべきか

このエントリーをはてなブックマークに追加
938デフォルトの名無しさん:2008/06/14(土) 20:53:14
難しいところなんかない
939デフォルトの名無しさん:2008/06/14(土) 23:18:55
ポインタの絡んだ宣言が、最初はわかりにくいかもしれん。
940デフォルトの名無しさん:2008/06/14(土) 23:49:08
ポインタの概念自体が難しいってより、
複雑なデータ構造とか、デバッグとか、そっちじゃないかね
941デフォルトの名無しさん:2008/06/15(日) 11:26:44
「int型」のポインタ変数p って覚えるからごっちゃになるらしい。
「int型のポインタ変数」p って覚えれば割とすんなり覚える。

だから教えるときは int *p; より int* p; で教えてる。
942デフォルトの名無しさん:2008/06/15(日) 14:10:45
まぁ、そういう考え方もあるのか〜、と。
943デフォルトの名無しさん:2008/06/15(日) 14:17:23
intとintポインターは別物
944デフォルトの名無しさん:2008/06/15(日) 15:01:03
http://www.cc.kyoto-su.ac.jp/~yamada/programming/pointer.html
> int* p, q, r; /* ポインタ変数なのは p だけ */

根本的に発想が違うからややこしい
945デフォルトの名無しさん:2008/06/15(日) 15:11:44
誤りはなさそうだが、
ポインタ初学者向けの記事だとしたらひどい内容だな。
946デフォルトの名無しさん:2008/06/15(日) 15:23:43
そもそも、ポインタを理解できてない香具師に限ってアドレスを持ち出したがる傾向がある。
947デフォルトの名無しさん:2008/06/15(日) 15:26:16
そうか? ってか、実生活ではポインタわからんなんて奴はいないな。

じーっと黙ってるだけなで、向かいの居乳のIさんは、ポインタをおそる
おそるナデナデしてんのか?
948デフォルトの名無しさん:2008/06/15(日) 15:28:34
>>947
日本語でOK
949デフォルトの名無しさん:2008/06/15(日) 15:32:15
Yeah, I'm speaking Japanese now, huh?
950デフォルトの名無しさん:2008/06/15(日) 15:33:00
>じーっと黙ってるだけなで
951デフォルトの名無しさん:2008/06/15(日) 15:35:00
okey, drop "な"
952デフォルトの名無しさん:2008/06/15(日) 21:59:15
ポインタ脳特有の同化現象だな
953デフォルトの名無しさん:2008/06/16(月) 09:12:07
概念がわかっても表現方法が糞なせいでつまづく。
954デフォルトの名無しさん:2008/06/24(火) 20:04:03
ポインタ=(アドレス保持,型情報)
955デフォルトの名無しさん:2008/06/26(木) 21:22:19
Cならアドレスに毛がは得たものだと思っておけばいいが
C++だと配列newとか仮想関数とかあるからな…
956デフォルトの名無しさん:2008/06/30(月) 02:34:27
ヌルポインタの内部表現は 0とは限らないから
「構造体をmemsetで初期化してはいけない」という話がこのスレにある

だが実際はそんな特殊な環境はめったに無く、人事だろうと思ってたんだ
957デフォルトの名無しさん:2008/06/30(月) 02:36:29
ところがどっこい、身近な環境でそのような例を作れることに気づいてしまった

以下のコードを実行すると、大抵の環境で2回目のassertに失敗する
手元の x86の VC7.1と gcc 3.4で確認したぜ

#include <assert.h>
#include <string.h>
int main()
{
struct A;
struct { int A::*p; } hoge = {0};
assert(!hoge.p); // こちらはOK
memset(&hoge, 0, sizeof(hoge));
assert(!hoge.p); // This assertion fails
}
958デフォルトの名無しさん:2008/07/05(土) 15:26:03
age
959デフォルトの名無しさん:2008/07/05(土) 20:19:28
メンバへのポインタのNULL表現か
これは興味深い
960デフォルトの名無しさん:2008/07/06(日) 04:59:50
struct A { int n; }; なら&A::nは0になるから、
0をNULLに使えないというわけか。
961デフォルトの名無しさん:2008/07/06(日) 22:11:10
gcc 3.4で実験

#include <stdio.h>
struct A {
char elem1;
char buf1[0x7FFFFFFF];
char buf2[0x7FFFFFFE];
char elem2;
char elem3;
char elem4;
};
union UP { char A::*p; size_t n; };
void test(const UP &x) { printf(" nval=%08x, is_null=%d\n", x.n, (x.p==0)); }

int main()
{
UP hoge;
printf("sizeof UP=%u\n", sizeof(UP));
hoge.p=0; test(hoge);
hoge.p=&A::elem1; test(hoge);
hoge.p=&A::elem2; test(hoge);
hoge.p=&A::elem3; test(hoge);
hoge.p=&A::elem4; test(hoge);
}
962デフォルトの名無しさん:2008/07/06(日) 22:12:08
結果
sizeof UP=4
nval=ffffffff, is_null=1
nval=00000000, is_null=0
nval=fffffffe, is_null=0
nval=ffffffff, is_null=1
nval=00000000, is_null=0
エラーチェック無しの gcc 君でした
963マイク ◆yrBrqfF1Ew :2008/07/19(土) 07:12:13
アセンブリ言語をやるとポインタを理解しやすいって書いてあるのを
昔web検索してたらどこかのサイトで見た。
964デフォルトの名無しさん:2008/07/19(土) 08:16:59
頭で理解しようとするから
プログラムは使用ー>理解が原則
965デフォルトの名無しさん:2008/07/19(土) 08:53:21
日本語でOK
966デフォルトの名無しさん:2008/07/19(土) 09:17:52
ポインタが理解できないのは頭で理解しようとするから。
プログラムは使用することで理解する、体験学習が原則。
967デフォルトの名無しさん:2008/07/19(土) 09:50:52
自然と覚える揉んだと思う
小学校でいうなら台形の公式くらいだろ
968デフォルトの名無しさん:2008/07/19(土) 11:55:04
台形の公式なんて聞いた瞬間に覚える種類のもんで、理解するようなもんじゃないだろ。
969デフォルトの名無しさん:2008/07/19(土) 12:34:04
上下逆さまにしたやつを横にくっつけると平行四辺形になり
その面積は 底辺×高さ=(台形の上底+台形の下底)×高さ だから
その半分で (上底+下底)×高さ÷2 と習うんだよ

>>968は小学校からろくに勉強してない池沼
970デフォルトの名無しさん:2008/07/19(土) 13:08:27
少なくともプログラマには向いてないな。>>968
971デフォルトの名無しさん:2008/07/19(土) 13:22:38
は? 対角線を引いて、上底からの三角形と下底からの三角形の面積の和でいいじゃん。
なんで平行四辺形なんて持ち出す必要あるんだ?
972デフォルトの名無しさん:2008/07/19(土) 13:31:25
補助線引くだけで難易度が上がるからな
973デフォルトの名無しさん:2008/07/19(土) 13:35:32
その三角形の面積は、平行四辺形の÷2じゃね
974デフォルトの名無しさん:2008/07/19(土) 13:37:57
>971
それだと
  (上底×高さ÷2)+(下底×高さ÷2)
という式になるだろ
この式を(変数が入ったまま)まとめるのは面積の計算を習う時点では不可能
975デフォルトの名無しさん:2008/07/19(土) 13:42:26
正しい結果が出るならどっちでもいいと思っている俺こそが真のプログラマ。
976デフォルトの名無しさん:2008/07/19(土) 13:47:49
そういうのの下についた奴は本当に不幸だな
977デフォルトの名無しさん:2008/07/19(土) 13:57:56
>>971>>974
そうやっても面積は求められるねというようなことも
教科書には書いてあった気がする、公式には969で出したけど。
978デフォルトの名無しさん:2008/07/20(日) 03:51:07
>>974
なんでだ?面積習う前に、結合法則も分配法則も習ってないのか?
979デフォルトの名無しさん:2008/07/26(土) 12:05:12
int pupi = 5;
int papu = 10;
int *poin = &pupi;
*poin = &papu;//なんでエラーが出るんだよ!
980デフォルトの名無しさん:2008/07/26(土) 12:22:17
*いらないから。
981デフォルトの名無しさん:2008/07/26(土) 15:12:29
&いらないから。
982デフォルトの名無しさん:2008/07/26(土) 17:59:41
int の *poin というよりは int* の poin だからな。初心者が疑問に思うのもわからんでもない。

いっそ static みたいに記述できれば混乱もないだろうに。
pointer int poin; みたいな。
983デフォルトの名無しさん:2008/07/26(土) 18:02:09
poin = &papu;か*poin = papu;
984デフォルトの名無しさん:2008/07/27(日) 17:28:32
次スレ

ポインタはどうやって学ぶべきか part2
http://pc11.2ch.net/test/read.cgi/tech/1217147291/
985デフォルトの名無しさん:2008/07/27(日) 17:56:07
           ,..-─‐-..、
            /.: : : : : : : .ヽ
          R: : : :. : pq: :i}    
           |:.i} : : : :_{: :.レ′
          ノr┴-<」: :j|
        /:r仁ニ= ノ:.ノ|!           _
          /:/ = /: :/ }!        |〕)  何だって?
       {;ハ__,イ: :f  |       /´
       /     }rヘ ├--r─y/
     /     r'‐-| ├-┴〆    _, 、_  '⌒ ☆
      仁二ニ_‐-イ  | |      ∩`ω´)
      | l i  厂  ̄ニニ¬      ノ  ⊂ノ  <<980-981
     ,ゝ、 \ \   __厂`ヽ    (__ ̄) )
     / /\_i⌒ト、_   ノrr- }     し'し′
   └-' ̄. |  |_二二._」」__ノ
986デフォルトの名無しさん:2008/07/27(日) 17:57:56
ソフトウェア開発技術者試験Part124
http://school7.2ch.net/test/read.cgi/lic/1214315947/

155 名前:名無し検定1級さん 投稿日:2008/06/28(土) 21:16:05
おまえ等は険しい雪山を登る登山家だ。
見えるだろ?
B木やらAVL木、二分木がうっそうと生い茂る、危険な沢付近を通行中だ。
987デフォルトの名無しさん
中国人の平均所得は低いけど、銀座には富裕層の中国人がうろうろしていて
日本の経済に影響を与えているだろ
平均やら統計やらだと実態を返って見失う好例

話が飛んでるけど、そもそも平均だけで判断しようっていうのが間違い。
平均だけ見たらあくまで平均が分かるだけで、富裕層の人数とかなんて判断できない。
平均だけを見て「統計」とかほざくな。分散とか標準偏差を高校の教科書で見てごらん。
ちゃんと統計結果を総合的に分析すれば実態を見失わないから。

煽りじゃなく忠告。
なんかお前って考えが表面的。
公式を覚えても意味がない。
本質を、根幹を見るようにしたほうがいい。