Ψ(`∀´)Ψケケケ と (´・ω・`)ショボーン

AviUtl用のスクリプト配布やBlender、自作PCのパーツやガジェットの情報を配信中

 

【プログラミング】アドレスとポインタについて【覚書】

Edit Category (´・ω・`)ショボーン

20160504221036

アドレスとポインタの関係で凡人らしく一通り悩み、取っ掛かりの部分がなんとなくわかったような気がしないでもないので自分用の覚書。

完全に入門者以下の認識なので、間違っている可能性も多々……。(+д+)マズー

アドレスとポインタの表記

  • アドレスは『&』を変数の前につけてやることで取得できる。(&aなどと表記)
  • ポインタは『 * 』は変数の前や型の後につける。(*p、int*などと表記)※

 

※ 変数のポインタと型のポインタの違いが今ひとつ……。

 

アドレスはメモリの番地であって、取得できるのはメモリに保存されている値ではない。

アドレスを取得してやり、ポインタに放り込んでやる(ラベル貼り?)ことで、そのポインタを経由して直接、アドレスに保存されている値をやり取りできる。

また、そうすることで処理の高速化が望める(読み書きのロスが減る)。また、デバイスなどは直接、メモリとやり取りするので、このアドレスとポインタが必要になってくる。

変数を定義して代入した値を物とすると……

  • アドレスは変数を定義したときにメモリ上に割り振られる番地(物の置き場所)。
  • ポインタはアドレス(番地のシール)を貼り付けることのできる空のダンボール
  • ポインタに値(物)を代入する(番地のシールを貼る)と、指定されたアドレスにダンボールが配達されて物(値)が既存のものと置き換わる(上書きされる)。

 

※ なんとなくわかったような気がする程度の理解なので、果たして適した表現なのかは微妙なところ……。


ポインタ変数モードと通常変数モードの切り替え

int main(void){
int a = 100;
int* b;   ←←← ポインタ変数として宣言。※
b = &a;   ←←← ポインタ変数 b に変数 a のアドレスを代入。
*b = 20;  ←←← 変数 a のアドレスを持つ変数 b に20という定数を代入。
printf(“aの中身は%dになる”,a);
return 0;
}

→→→ 『aの中身は20になる』と出力される。

 

  1. ポインタ変数として、メモリのアドレスを代入。
  2. 通常の変数に切り替えて、1で代入したアドレスのメモリ(に保存されている値)を直接操作。

 

※ ポインタ変数にアドレスを代入したか確認するためにヌルポインタを使用する。ポインタ変数宣言時にNULLという記号をポインタ変数に代入しておくと、使用不可のアドレスを使わずに済む。

(例) int *b = NULL;

配列とポインタ

配列とポインタは同種のもの……? 

配列の要素を扱うときは配列名[添字]で表記。配列名に添字をつけずに使用すると、配列の先頭要素である配列名[0]を指すポインタ、&配列名[0]になる。

 

int main(void){
int array[10];
int *p;
int i;

p = array;  ←←← p = &array[0]と同じ意味。ダンボールに番地が貼られる。※
for ( i = 0; i < 10; i++ ){
p[i] = i;   ←←← array[i] = i と同じ意味。ダンボールに物が入り、配達される。
printf(“%d”,array[i]);
}

return 0;
}

→→→ 0 1 2 3 4 5 6 7 8 9

 

※ p = &array[2];として、forの中身の処理を*(p+i) = i;とすると、array[i+2]=iと同じ意味になる。

ポインタについて

 

( -人-).。oO(・・・・・・先は長そう)

処理を軽くしようと思ったらアドレスとポインタを使いこなすのは必須っぽいなぁ……。

関連記事
スポンサーサイト
Community テーマ - プログラミング  ジャンル - コンピュータ

Newer Entry【AviUtl】カスタムオブジェクトの『手動目盛り』を配布【拡張編集】

Older Entry【AviUtl】指定色以外の部分をモノクロ化するアニメーション効果『色抜き(dll)』を配布【拡張編集】

Comments


Trackbacks

 
12 2016
SUN MON TUE WED THU FRI SAT
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

11 01


 
 
 
注意事項

紹介されているフリーソフト、スクリプトをインストールするときは、フリーソフトの説明および注意事項を熟読し、自己責任においてご利用下さい。



記事:Amazonギフト券の期限など
特価情報:各ジャンル・タイムセール

 
 
オススメ
















 
PLAY ARTS改 BATMAN™: ARKHAM KNIGHT バットマン™
PLAY ARTS改 BATMAN™: ARKHAM KNIGHT バットマン™ PVC製 塗装済み可動フィギュア
 
人気記事
 
 
ブログ内検索
記事を探すときは、キーワードで検索をかけると速くて便利です。
 
 
 
ブログ内検索
記事を探すときは、キーワードで検索をかけると速くて便利です。
 
 
動画編集・3DCG向け自作PC構成2016冬(skylake世代)
用途に合わせてCPUやGPUを1ランク上げたり落としたり、SSDやHDDの容量を抑えたりすると、バランスもコスパも良いPCになるよ!金属パッドは殻割り用。



記事:CPUの『殻割り』に使うグリスの候補【OC 殻割り】



 
オススメのフリーソフト
ブラウザ(お好みで。複数可)
Firefox
Opera
Sleipnir
ファイアウォール(必須)
Comodo Internet Security
ZoneAlarm
Outpost Security Suite FREE
アンチウィルスソフト(必須)
avast! 4 Home Edition
avira 無料版
AVG Anti-Virus Free Edition
レジストリ保護&クリーナー(必須)
Spybot-S&D
CCleaner
圧縮・解凍ソフト(必須)
Lhaplus
7-Zip
オフィスソフト
OpenOffice.org
LibreOffice
TeraPad
メーラー
Thunderbird
オンライン・コミュニケーション・ツール
Open Live Writer
Skype
Windows Live メッセンジャー / MSN メッセンジャー
Backup & PartitionEditor
EaseUS Todo Backup Free
EaseUS Partition Master
コーデックパック(どちらか)
K-Lite Codec Pack
 
Combined Community Codec Pack
各エンコーダ&デコーダ、スプリッタ(競合注意)
ffdshow
Xvid Codec
qaac Codec
x264vfw
Haali Media Splitter
LAV Splitter
webm
Google VP8 Video For Windows codec
動画音楽再生プレーヤー(複数可)
MPC Home Cinema
GOM PLAYER
SMPlayer
VLC media player
動画加工編集ソフト
Windows ムービー メーカー
Windows Media エンコーダ
MP4Cam2AVI
Any Video Converter フリー版
CamStudio
SEffect
x264vfw
AviUtl
AviUtlのプラグイン
MediaCoder
Nero AAC Codec
Avidemux.org
真空波動研 Lite
えこでこツール
XMedia Recode
グラフィックソフト
Blender
Inkscape
GIMP
PlayMemories Home
FireAlpaca
HTML&ブログ制作
ez-HTML
Windows Live Writer
FFFTP
WinShot
Aptana | Studio
AviUtl
AviUtlの基礎構成ファイルDL
その他、色々と……
DataRecovery
CPU-Z
CrystalDiskMark
CrystalDiskInfo
 
 
QRコード
QRコード
 
プロフィール

Ψ(`∀´)Ψケケケ

Author:Ψ(`∀´)Ψケケケ
現在はAviUtl用の駄スクリプトを書いて配布中。使用は自己責任でお願いします。

 
 


ARCHIVE RSS