1999年度のプログラミングIIIの授業は終りました。 この授業のページは参照用の資料として保存しているものです。最新の情報・資料は江上の授業ページで。 |
変数・ポインタ・配列の関係 |
アドレスと内容
int var ;
int *pointer ; int array[ 10 ] ; |
|
|
|
|
|
|
または & array[ 0 ] |
|
は理にかなっている(アドレス同士の代入である)が、
&var = *pointer ;
などとは書かない(書けない)。
例2)
var = var ; Good
var = & var ;
var = *pointer ; Good
var = pointer ;
var = & pointer;
var = array[0] ; Good
var = array;
pointer = var ;
pointer = & var ; Good
pointer = pointer; Good
pointer = *pointer;
pointer = & pointer; Good
pointer = array[ 0 ] ;
pointer = array ; Good
*pointer = var ; Good
*pointer = & var ;
*pointer = pointer ;
*pointer = *pointer ; Good
*pointer = & pointer ;
*pointer = array [ 0 ]; Good
*pointer = array ;
array[ 0 ] = var ; Good
array[ 0 ] = &var ;
array[ 0 ] = pointer ;
array[ 0 ] = *pointer ; Good
array[ 0 ] = &pointer ;
array[ 0 ] = array[ 0 ] ; Good
array[ 0 ] = array ;
代入の型(変数とポインタ)が合っていない場合には翻訳(cc)時に以下のような警告メッセージ(warning)が出る。これらは致命的なエラーではないので実行プログラム(a.out)は生成される(翻訳時の警告)。
bash$ cat test.c
#include <stdio.h> main()
b = a; /* ← ここがおかしい
*/
bash$ cc test.c
|
bash$ cat test.c
#include <stdio.h> main()
&a = b; /* ← ここが変 */
bash$ cc test.c
|
bash$ cat test.c
#include <stdio.h> main()
*b = 10; /* 初期化されていない
*/
bash$ cc test.c
|