![]() |
C言語ワンポイント講座ポインタと派生型徹底入門 サンプルプログラム集コンピュータを学習する人の学校:パソコンキャンパス、プログラミングキャンパス |
ここでは、 The Office Uchida, School of Computerの e-Learningシステム 「C言語ワンポイント講座 ポインタと派生型入門」のためのサンプルプログラムを紹介しています。
この中に記載されているプログラムをブラウズあるいはカットアンドペーストしてください。
Sample list 1-1 ポインタの利用 | sample1_1.c |
#include<stdio.h> int main( void ) { int *p; int k = 12345; int t; p = &k; t = *p; printf( "p=%p, t=%d\n", p, t ); return 0; } |
Sample list 1-1の実行結果(cygwin) |
% gcc sample1_1.c % ./a p=0x22ef10, t=12345 |
Sample list 1-2 割り当てられていない領域をアクセス | sample1_2.c |
#include<stdio.h> int main( void ) { int *p; int k = 12345; int t; p = &k; p++; t = *p; /* エラー:存在しない領域をアクセス */ printf( "p=%p, t=%d\n", p, t ); return 0; } |
実行結果を見ると、頓珍漢な値(2289428)が表示されています。これは、もともとそこにあった値です。
Sample list 1-2の実行結果(cygwin) |
% gcc sample1_2.c % ./a p=0x22ef14, t=2289428 |
Sample list 1-3 ポインタの利用:割り当てられている領域を正しくアクセス | sample1_3.c |
#include<stdio.h> int main( void ) { int *p; int k[2] = { 12345, 67890, }; int t; p = &k[0]; p++; t = *p; /* *pは、k[1]を指す */ printf( "p=%p, t=%d\n", p, t ); return 0; } |
Sample list 1-3の実行結果(cygwin) |
% gcc sample1_3.c % ./a p=0x22ef0c, t=67890 |
プログラム1-4は、プログラム1-3とほとんど同じです。唯一異なるのは、配列kの先頭アドレスを&k[0]ではなく、kとしている点です。 配列名は、式の中では、その配列の先頭要素を指すポインタに変換されます。
Sample list 1-4 ポインタの利用:割り当てられている領域を正しくアクセス | sample1_4.c |
#include<stdio.h> int main( void ) { int *p; int k[2] = { 12345, 67890, }; int t; p = k; /* kは、配列要素k[1]の先頭アドレスを指す */ p++; t = *p; /* *pは、k[1]を指す */ printf( "p=%p, t=%d\n", p, t ); return 0; } |
Sample list 1-4の実行結果(cygwin) |
% gcc sample1_4.c % ./a p=0x22ef0c, t=67890 |
Sample list 1-5 ポインタの利用:途中の配列要素からのアクセス | sample1_5.c |
#include<stdio.h> int main( void ) { int *p; int k[3] = { 11111, 22222, 33333, }; int t; p = &k[1]; p++; t = *p; /* *pは、k[2]を指す */ printf( "p=%p, t=%d\n", p, t ); return 0; } |
Sample list 1-5の実行結果(cygwin) |
% gcc sample1_5.c % ./a p=0x22eef8, t=33333 |
Sample list 1-6 配列をなぞる | sample1_6.c |
#include<stdio.h> int main( void ) { int *p; int k[3] = { 11111, 22222, 33333, }; int i; p = k; for( i=0; i<3; i++ ) { int value = *p++; printf( "value=%d\n", value ); } return 0; } |
Sample list 1-6の実行結果(cygwin) |
% gcc sample1_6.c % ./a value=11111 value=22222 value=33333 |