![]() |
C言語ワンポイント講座ポインタと派生型徹底入門 サンプルプログラム集コンピュータを学習する人の学校:パソコンキャンパス、プログラミングキャンパス |
ここでは、 The Office Uchida, School of Computerの e-Learningシステム 「C言語ワンポイント講座 ポインタと派生型入門」のためのサンプルプログラムを紹介しています。
この中に記載されているプログラムをブラウズあるいはカットアンドペーストしてください。
Sample list 2-1 ポインタのポインタのポインタ |
Sample list 2-2 配列を指すポインタ(基本版) |
Sample list 2-3 配列を指すポインタ(応用版) |
Sample list 2-4 ポインタ配列 |
Sample list 2-5 ポインタ配列の応用例 |
Sample list 2-1 ポインタのポインタのポインタ | sample2_1.c |
#include<stdio.h> int main( void ) { int p0 = 12345; int *p1; /* ポインタ */ int **p2; /* ポインタのポインタ */ int ***p3; /* ポインタのポインタのポインタ */ int t1, t2, t3; p1 = &p0; /* 「int型のオブジェクト」のアドレスを「ポインタ」にセット */ p2 = &p1; /* 「ポインタ」のアドレスを「ポインタのポインタ」にセット */ p3 = &p2; /* 「ポインタのポインタ」のアドレスを「ポインタのポインタのポインタ」にセット */ t1 = *p1; /* 「ポインタ」の指しているオブジェクトの値をt1にセット */ t2 = **p2; /* 「ポインタのポインタ」の指しているオブジェクトの値をt2にセット */ t3 = ***p3; /* 「ポインタのポインタのポインタ」の指しているオブジェクトの値をt3にセット */ printf( "t1=%d, t2=%d, t3=%d\n", t1, t2, t3 ); return 0; } |
Sample list 2-1の実行結果(cygwin) |
% gcc sample2_1.c % ./a t1=12345, t2=12345, t3=12345 |
Sample list 2-2 配列を指すポインタ(基本版) | sample2_2.c |
#include<stdio.h> int main( void ) { int t[3] = { 1, 2, 3, }; int (*p)[3]; /* 「要素を3つ持つ1次元配列」へのポインタ */ int t1; p = &t; /* 「要素を3つ持つ1次元配列」のアドレスをpにセット */ t1 = (*p)[1]; /* 「要素を3つ持つ1次元配列」のポインタが指している配列の1つめ(実際には2つめ)の要素 */ printf("t1=%d\n", t1 ); return 0; } |
Sample list 2-2の実行結果(cygwin) |
% gcc sample2_2.c % ./a t1=2 |
Sample list 2-3 配列を指すポインタ(応用版) | sample2_3.c |
#include<stdio.h> int main( void ) { int a[2][3][4] = { { { 1, 2, 3, 4, }, { 5, 6, 7, 8, }, { 9,10,11,12, }, }, { { 13,14,15,16, }, { 17,18,19,20, }, { 21,22,23,24, }, } }; int *b; /* = int型のオブジェクトを指すポインタ */ int (*c)[4]; /* = 4個の要素(int型)を持つ配列を指すポインタ */ int (*d)[3][4]; /* = 3×4個の要素(int型)を持つ配列を指すポインタ */ int a1, a2, a3; b = a[1][2]; /* a[1][2]={21,22,23,24,}の配列の先頭アドレスをbにセット */ c = a[1]; /* a[1]={{13,14,15,16,},{17,18,19,20,},{21,22,23,24,}}の配列の先頭アドレスをcにセット */ d = a; /* 3次元配列aを指すアドレスをdにセット */ a1 = b[3]; /* = a[1][2][3] */ a2 = c[1][2]; /* = a[1][1][2] */ a3 = d[0][1][2]; /* = a[0][1][2] */ printf( "a[1][2][3] = %d\n", a[1][2][3] ); printf( "a1=%d, a2=%d, a3=%d\n", a1, a2, a3 ); return 0; } |
Sample list 2-3の実行結果(cygwin) |
% gcc sample2_3.c % ./a a[1][2][3] = 24 a1=24, a2=19, a3=7 |
Sample list 2-4 ポインタ配列 | sample2_4.c |
#include<stdio.h> int main( void ) { int k1=1, k2=2, k3=3; int *p[3] = { &k1, &k2, &k3, }; int t; for( t=0; t<3; t++ ) { int value = *p[t]; printf( "value=%d\n", value ); } return 0; } |
Sample list 2-4の実行結果(cygwin) |
% gcc sample2_4.c % ./a value=1 value=2 value=3 |
Sample list 2-5 ポインタ配列の応用例 | sample2_5.c |
#include<stdio.h> int main( void ) { int k; char *mes[] = { "one", "two", "three", (char *)NULL, }; for( k=0; mes[k]; k++ ) { printf( "mes=%s, ", mes[k] ); } return 0; } |
Sample list 2-5の実行結果(cygwin) |
% gcc sample2_5.c % ./a mes=one, mes=two, mes=three, |