資料集
ここはhideyosiの学習帳です。いろいろな資料を集めたり整理したりしています。オイラ用のノートなので間違っていたり未完成だったりしますので信用度は相当低いことをあらかじめご了承くださいませ。
6: 2007-03-27 (Tue) 03:02:24 source Edit Backup No.6 as current. Cur: 2024-01-06 (Sat) 22:37:40 source Edit
Line 52: Line 52:
                             関数かは解るだろう。メモリの0xB8001番地に、                              関数かは解るだろう。メモリの0xB8001番地に、
                             0x42を書き込めと命令している。                              0x42を書き込めと命令している。
 + 
 char *p;                  ←上記の妄想関数と同じことをC言語のポインタ  char *p;                  ←上記の妄想関数と同じことをC言語のポインタ
 p = 0xB8001;                でやろうとするとこうなる。まずはとにかく、  p = 0xB8001;                でやろうとするとこうなる。まずはとにかく、
Line 66: Line 66:
   writemem(0xB8003,0x30);    writemem(0xB8003,0x30);
 }  }
 + 
 char *p;                      ←上記の処理をポインタを使ってやってみた。  char *p;                      ←上記の処理をポインタを使ってやってみた。
 p = 0xB8003;                    こんなふうに並べると、だんだん解ってこない?  p = 0xB8003;                    こんなふうに並べると、だんだん解ってこない?
Line 122: Line 122:
 short *s;  short *s;
 int *i;  int *i;
 + 
 c = 0x11111111;  c = 0x11111111;
 s = 0x22222222;  s = 0x22222222;
 i = 0x33333333;  i = 0x33333333;
 + 
 c = c + 1;  c = c + 1;
 s = s + 1;  s = s + 1;
 i = i + 1;  i = i + 1;
 + 
 printf("c pointer is %d\n",c);  printf("c pointer is %d\n",c);
 printf("s pointer is %d\n",s);  printf("s pointer is %d\n",s);
Line 148: Line 148:
こうなるんですよねぇ〜。「ポインタは足し算引き算だけできる変数」と考えちゃうと逆に理解できませんよね?。なんでこうなるのか?? こうなるんですよねぇ〜。「ポインタは足し算引き算だけできる変数」と考えちゃうと逆に理解できませんよね?。なんでこうなるのか??
 +
 +
 +これの解説はまあいろいろな考え方がありますが、私は上記通り、「ポインタは住所の番地である」という概念から説きます。
 +
 +まず根本的に、''ポインタへの足し算引き算なんてない''のです。!
 +
 +COLOR(red){え"〜!! だって、現に}
 +
 + char *p;
 + int i;
 + p = p + 1
 + i = i + 1
 +
 +COLOR(red){こういう演算がされているじゃない!?}
 +
 +
 +ここがミソ!!(死語)
 +
 +普通の数値であるiに+しているのとポインタであるpに+しているのは、まったく意味が違うのです。
 +
 +
 +''数値''が相手なら、文字通り、足し算です。単に足せばよろしい。
 +
 +
 +しかし、ポインタに+するのは、''何軒先のお家!''という意味なのです。


Front page   Edit Diff Backup Upload Copy Rename Reload   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 4082, today: 1, yesterday: 1