07≪ 12345678910111213141516171819202122232425262728293031≫09
| Home |
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告】 | top↑
ポインタとポインタのポインタ
Cのポインタはアドレスを指すもの。
int a = 0;
なら a のアドレス(参照)をとるには &a と書く

int *p;

int型ポインタ
弱いなりにも静的型付なのでポインタの型を指定する必要がある。


a のアドレスをポインタ p に渡す場合:

p = &a;

つまり*は宣言時に使用される。さらに*を使う場所はもうひとつ

int b = *p;

*p はデリファレンス
もちろん

*p = 2;

などもできる。この場合

a == 2


になる


配列とポインタは強い関係がある。

char a[10];
char *cp = a;


これはchar配列には9のchar型と1つ('\0' 終了エスケープ)が入る。
2行目でcpはaのアドレスをとる
aのアドレスは
a[0]と同義である

つまり

a(address) == a[0](address)

ということになる

ではなぜポインタが配列に近いが同じものでないかというと

ポインタはインクリメント/デクリメント/足し引きでメモリアドレスのオフセットをいじれる

からだ

つまり

cp++; ++cp; --cp; cp--;

というのはエラーにならない。

cp = a;
の場合
cp++;
することにより

*cp == a[1]

となる、又

インクリメントせずに
*(cp + 2) == a[2];

と言う表現もできる。

これがJavaなどの万全のフェイルセーフを完備している言語と違うところで
ポインタは任意の場所を指したいだけさせる。
なので、危険性はものすごく高い。


次にポインタのポインタ

...READ MORE▼

スポンサーサイト

THEME:プログラミング - GENRE:コンピュータ
CTB(0) | CM(3) | top↑
| Home |
プロフィール

りん

Author:りん
〃∩ ∧_∧   ブログっと…
⊂⌒( ´・ω・)
  `ヽ_っ_/ ̄ ̄ ̄/ ζ
      \/___/ 旦
ランキングだお

こんなところもやってます。
最近はもっぱらこっちでボヤいてます。

応援中

airy[F]airy
『airy[F]airy (エアリィフェアリィ)』応援中!
rococoworksさん

ナツユメナギサ
サガプラネッツ最新作「ナツユメナギサ」
SAGA PLANETSさん

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。