C言語ワンポイント講座ポインタと派生型徹底入門 サンプルプログラム集

コンピュータを学習する人の学校:パソコンキャンパス、プログラミングキャンパス

ここでは、 The Office Uchida, School of Computerの e-Learningシステム 「C言語ワンポイント講座 ポインタと派生型入門」のためのサンプルプログラムを紹介しています。

この中に記載されているプログラムをブラウズあるいはカットアンドペーストしてください。

目次に戻る


第1章 ポインタの復習

内容
Sample list 1-1 ポインタの利用
Sample list 1-2 ポインタの利用:割り当てられていない領域をアクセス
Sample list 1-3 ポインタの利用:割り当てられている領域を正しくアクセス
Sample list 1-4 ポインタの利用:割り当てられている領域を正しくアクセス
Sample list 1-5 ポインタの利用:途中の配列要素からのアクセス
Sample list 1-6 ポインタの利用:配列をなぞる

ポインタの利用

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

目次に戻る, 先頭に戻る


Copyright (c) 2006 Satoshi Uchida, The Office Uchida, School of Computer