C ポインタ 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(ポインタ)
7行: 7行:
 
== '''ポインタ''' ==
 
== '''ポインタ''' ==
  
プログラムを組む上で、各種の型の変数を使いますが、変数自身はコンピュータ上のメモリ空間に保存されます。
+
 プログラムを組む上で、各種の型の変数を使いますが、変数自身はコンピュータ上のメモリ空間に保存されます。
 
ポインタはそのメモリ空間のアドレスを保持するための変数です。int型変数のためのint型のアドレス変数みたいなもの<br />
 
ポインタはそのメモリ空間のアドレスを保持するための変数です。int型変数のためのint型のアドレス変数みたいなもの<br />
  
  
ここで少しメモリ空間についてのイメージを少しだけもってもらえるために、補足しておきます。<br />
+
 ここで少しメモリ空間についてのイメージを少しだけもってもらえるために、補足しておきます。<br />
メモリ空間にはアドレス番号と呼んでいるものが割り振られています。日本の空間の地図上のどこにあなたの家があるかを指し示す住所と同じようなものを、単なる番号だけで定義しているのです。半導体メモリDRAMについて少し調べると長方形上の敷地3cm*4cm位の中に4~8つほどの長方形の敷地があって、全部で4G個(個って書きましたが、情報処理用語としてはbit(ビット)という単位が使われます。Gはギガで10の9乗で10億)ほどの記憶領域があることがわかります。<br />
+
 メモリ空間にはアドレス番号と呼んでいるものが割り振られています。日本の空間の地図上のどこにあなたの家があるかを指し示す住所と同じようなものを、単なる番号だけで定義しているのです。半導体メモリDRAMについて少し調べると長方形上の敷地3cm*4cm位の中に4~8つほどの長方形の敷地があって、全部で4G個(個って書きましたが、情報処理用語としてはbit(ビット)という単位が使われます。Gはギガで10の9乗で10億)ほどの記憶領域があることがわかります。<br />
  
  
更にその3cm~4cmの敷地を同じ樹脂の中に複数枚重ねたり、その樹脂の塊を電子回路基盤に1個~16個くらいとりつけていたり、その電子回路基板を複数個とりつけたりして、現在のNotePCとかでは8GByte(8bitで1Byte(バイト))という容量のものを取り付けて販売している状況です。ある人はプログラム的には一本に並んだ数十億の箱だと言ったりしますが、物理的には、DRAMメモリのある敷地の中のある一点だったり、HDD上においやられた領域だったりするわけです。<br />
+
 更にその3cm~4cmの敷地を同じ樹脂の中に複数枚重ねたり、その樹脂の塊を電子回路基盤に1個~16個くらいとりつけていたり、その電子回路基板を複数個とりつけたりして、現在のNotePCとかでは8GByte(8bitで1Byte(バイト))という容量のものを取り付けて販売している状況です。ある人はプログラム的には一本に並んだ数十億の箱だと言ったりしますが、物理的には、DRAMメモリのある敷地の中のある一点だったり、HDD上においやられた領域だったりするわけです。<br />
  
  
※単位についてですが、K(キロ)は普通10の3乗で1000ですが、厳密にはコンピュータでは2の10乗の1024Byteが1KByteになります。2の10乗KByteの1024KByteで1MByte(メガバイト)ですし、1024MByteで1GByteとなります。但し、普通に1000Byteを1KByteとしたり、1000KByteを1MByte、1000MByteを1GByteとしている。ざっくりとした仕様でコンピュータの性能を表現しているものが一般的です。情報処理用語として1TByte(テラバイト テラは10の12乗)と表現した場合、1兆0995億1162万7776Byteですが、ざっくり仕様が使われている各種メーカの容量では、実際には10の12乗Byteで995億1162万7776Byte少ないです。仕様書の隅っこに1000kByteを1Byteとして計算していますとか明示してあります。<br />
+
 ※単位についてですが、K(キロ)は普通10の3乗で1000ですが、厳密にはコンピュータでは2の10乗の1024Byteが1KByteになります。2の10乗KByteの1024KByteで1MByte(メガバイト)ですし、1024MByteで1GByteとなります。但し、普通に1000Byteを1KByteとしたり、1000KByteを1MByte、1000MByteを1GByteとしている。ざっくりとした仕様でコンピュータの性能を表現しているものが一般的です。情報処理用語として1TByte(テラバイト テラは10の12乗)と表現した場合、1兆0995億1162万7776Byteですが、ざっくり仕様が使われている各種メーカの容量では、実際には10の12乗Byteで995億1162万7776Byte少ないです。仕様書の隅っこに1000kByteを1Byteとして計算していますとか明示してあります。<br />
  
  
CPU(Central Processing Unit)とよばれる中央処理装置にも記憶領域があります。キャッシュとよばれています。HDD(Hard Disk Drive)やSSD(Solid State Drive)にも処理記憶領域は作れます。いろいろなところに作れますがアドレスは番号だけで管理されています。CPUの中にある記憶領域を使った場合が最も早く処理され、次にDRAM、そしてSSD、HDD、その他という具合に保存されている場所によっても処理速度が異なるのも特徴です。記憶している領域により処理速度が低下する問題を解決する手法もよく使われる命令を処理速度の高いところにおいたりと、いろいろな試みがなされています。いろいろな試みについてはWindowsやUnixといったOS(Operating System)側が制御します。<br />
+
 CPU(Central Processing Unit)とよばれる中央処理装置にも記憶領域があります。キャッシュとよばれています。HDD(Hard Disk Drive)やSSD(Solid State Drive)にも処理記憶領域は作れます。いろいろなところに作れますがアドレスは番号だけで管理されています。CPUの中にある記憶領域を使った場合が最も早く処理され、次にDRAM、そしてSSD、HDD、その他という具合に保存されている場所によっても処理速度が異なるのも特徴です。記憶している領域により処理速度が低下する問題を解決する手法もよく使われる命令を処理速度の高いところにおいたりと、いろいろな試みがなされています。いろいろな試みについてはWindowsやUnixといったOS(Operating System)側が制御します。<br />
  
  
少し、脱線しましたが、記憶領域にはアドレス番号が割り振られているということでした。また更に脱線すると、32bitOSとか64bitOSという種類がありますが、<br />
+
 少し、脱線しましたが、記憶領域にはアドレス番号が割り振られているということでした。また更に脱線すると、32bitOSとか64bitOSという種類がありますが、<br />
 
このアドレス番号の割り振りに使われる桁数に違いがあります。32bitなら2の32乗個のアドレス42億9496万7296個、64bitなら2の64乗個のアドレス1844京6744兆0737億0955万1616個が使えるということになります。
 
このアドレス番号の割り振りに使われる桁数に違いがあります。32bitなら2の32乗個のアドレス42億9496万7296個、64bitなら2の64乗個のアドレス1844京6744兆0737億0955万1616個が使えるということになります。
 
1Gは10億7374万1824Byteでしたから、40億ちょいっつうのは4GByteのことで、32bitOSでは4GByteまでしか使えないということになります。<br />
 
1Gは10億7374万1824Byteでしたから、40億ちょいっつうのは4GByteのことで、32bitOSでは4GByteまでしか使えないということになります。<br />
  
  
という簡単な基礎知識を頭の片隅に本題に入ります。<br />
+
 という簡単な基礎知識を頭の片隅に本題に入ります。<br />
例えば、Visual Studio2012ではint型は4Byteの変数で使える値の種類は2の4*8bit=32bitで2の32乗=42億9496万7296となります。実際には負の数も表現できますので、先頭1ビットは正負の記号を表し、0なら正、1なら負数で全部32bit全部が1のときが-1です。2進数の補数ってのを勉強しないとダメかも、負数の最大は100000…0000001で、-21億4748万3646~21億4748万3647が表現できる値です。その4Byteを収めてるアドレスは64Bitアドレスなら1844京…の中のどこかから4Byte分のアドレスを使ってるということです。全部のアドレス分の資源16EByte(Eはエクサで10の18乗で100京)がコンピュータに備わっていればの話ですが...
+
 例えば、Visual Studio2012ではint型は4Byteの変数で使える値の種類は2の4*8bit=32bitで2の32乗=42億9496万7296となります。実際には負の数も表現できますので、先頭1ビットは正負の記号を表し、0なら正、1なら負数で全部32bit全部が1のときが-1です。2進数の補数ってのを勉強しないとダメかも、負数の最大は100000…0000001で、-21億4748万3646~21億4748万3647が表現できる値です。その4Byteを収めてるアドレスは64Bitアドレスなら1844京…の中のどこかから4Byte分のアドレスを使ってるということです。全部のアドレス分の資源16EByte(Eはエクサで10の18乗で100京)がコンピュータに備わっていればの話ですが...
 
とにかく、そういったアドレスを覚えさせるのが、ポインタ変数です。<br />
 
とにかく、そういったアドレスを覚えさせるのが、ポインタ変数です。<br />
  

2022年2月9日 (水) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス