1999年度のプログラミングIIIの授業は終りました。 この授業のページは参照用の資料として保存しているものです。最新の情報・資料は江上の授業ページで。 |
ポインタ・配列(右辺値と左辺値) |
このページでは変数は
int var ;
int * pointer ;
int array [ 100 ] ;
と割り当てられているという前提で話をすすめる。
この時プログラム中で許される表記を分類すると以下のようになる。
|
|
var | var
&var |
pointer | *pointer
pointer pointer[ 0 ], pointer [ 1 ], pointer[ 2 ] ... &pointer |
array | array[ 0 ] ... array[ 99 ]
array &array *array |
L-value = R-value ;
>>> 考え方
|
|
|
宣言 | int * pointer ; | int array [ 100 ] ; |
データの参照
( R-value ) |
*pointer | array[0] ... array[99]
*array |
データの代入
( L-value ) |
*pointer | array[0] ... array[99]
*array |
アドレスの参照
( R-value ) |
pointer | array
&array[0] |
アドレスの指定
( L-value ) |
pointer | ×(不可) |
安全性 | ポインタの指しているアドレスによっては異常を引き起こす | 配列の添字が範囲を超えていなければ安全 |
>>> 違いは・・・
の違いはあるが、その他の点ではアクセス(参照・代入)方法において、
よく似ている。
>>> 例
(array + 1) と & array[ 1 ] と ( & array[0] + 1 ) と ( & array[2] - 1 )
array[ 0 ] と *array と *( & array[ 0 ] )
array[ 1 ] と *( array + 1 ) と *( & array[ 0 ] + 1 ) と *( & array[ 1 ] )
*pointer と pointer[0]
*(pointer + 1) と pointer[1]