配列を受け渡すプログラム
#include <stdio.h> /*--- 配列の先頭三要素に1,2,3を代入 ---*/ void set123(int *vc) { *vc = 1; // vc[0] = 1; *(vc + 1) = 2; // vc[1] = 2; vc[2] = 3; // vc[2] = 3; } int main(void) { int i; int ary[5] = { 0 }; // 全ての要素を0で初期化 set123(ary); for (i = 0; i < 5; i++) printf("ary[%d] = %d\n", i, ary[i]); return (0); }
実行結果
ary[0] = 1 ary[1] = 2 ary[2] = 3 ary[3] = 0 ary[4] = 0
ポインタの比較と減算をするプログラム
#include <stdio.h> int main(void) { int vc[5]; int *ptr = vc; printf("ptr == vc : %d\n", ptr == vc); printf("ptr == &vc[0] : %d\n", ptr == &vc[0]); printf("ptr == &vc[1] : %d\n", ptr == &vc[1]); printf("&vc[1] < &vc[2] : %d\n", &vc[1] < &vc[2]); printf("&vc[2] - vc : %d\n", &vc[2] - vc); return (0); }
実行結果
ptr == vc : 1 ptr == &vc[0] : 1 ptr == &vc[1] : 0 &vc[1] < &vc[2] : 1 &vc[2] - vc : 2
配列とポインタを用いて各要素を表示するプログラム
#include <stdio.h> int main(void) { int i; int vc[5] = {10, 20, 30, 40, 50}; int *ptr = &vc[0]; for (i = 0; i < 5; i++) { printf("vc[%d]=%d %d[vc]=%d ", i, vc[i], i, i[vc]); printf("*(vc+%d)=%d *(%d+vc)=%d\n", i, *(vc+i), i, *(i+vc)); } putchar('\n'); for (i = 0; i < 5; i++) { printf("*(ptr+%d)=%d *(%d+ptr)=%d ", i, *(ptr+i), i, *(i+ptr)); printf("ptr[%d]=%d %d[ptr]=%d\n", i, ptr[i], i, i[ptr]); } return (0); }
実行結果
vc[0]=10 0[vc]=10 *(vc+0)=10 *(0+vc)=10 vc[1]=20 1[vc]=20 *(vc+1)=20 *(1+vc)=20 vc[2]=30 2[vc]=30 *(vc+2)=30 *(2+vc)=30 vc[3]=40 3[vc]=40 *(vc+3)=40 *(3+vc)=40 vc[4]=50 4[vc]=50 *(vc+4)=50 *(4+vc)=50 *(ptr+0)=10 *(0+ptr)=10 ptr[0]=10 0[ptr]=10 *(ptr+1)=20 *(1+ptr)=20 ptr[1]=20 1[ptr]=20 *(ptr+2)=30 *(2+ptr)=30 ptr[2]=30 2[ptr]=30 *(ptr+3)=40 *(3+ptr)=40 ptr[3]=40 3[ptr]=40 *(ptr+4)=50 *(4+ptr)=50 ptr[4]=50 4[ptr]=50
三つの整数を昇順に並べ替える
#include <stdio.h> /*--- nx, nyが指すオブジェクトの値を交換 ---*/ void swap(int *nx, int *ny) { int temp = *nx; *nx = *ny; *ny = temp; } /*--- *n1≦*n2≦*n3となるように並べ替える ---*/ void sort3(int *n1, int *n2, int *n3) { if (*n1 > *n2) swap(n1, n2); if (*n2 > *n3) swap(n2, n3); if (*n1 > *n2) swap(n1, n2); } int main(void) { int na, nb, nc; puts("三つの整数を入力してください。"); printf("整数A:"); scanf("%d", &na); printf("整数B;"); scanf("%d", &nb); printf("整数C;"); scanf("%d", &nc); sort3(&na, &nb, &nc); puts("これらの値を昇順に並べ替えました。"); printf("整数Aは%dです。\n", na); printf("整数Bは%dです。\n", nb); printf("整数Cは%dです。\n", nc); return (0); }
実行結果
三つの整数を入力してください。 整数A:32 整数B;48 整数C;15 これらの値を昇順に並べ替えました。 整数Aは15です。 整数Bは32です。 整数Cは48です。
二つの整数を昇順に並べるプログラム
#include <stdio.h> /*--- nx,nyが指すオブジェクトの値を交換 ---*/ void swap(int *nx, int *ny) { int temp = *nx; *nx = *ny; *ny = temp; } /*--- *n1≦*n2となるように並べる ---*/ void sort2(int *n1, int *n2) { if (*n1 > *n2) swap(n1, n2); } int main(void) { int na, nb; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); sort2(&na, &nb); puts("これらの値を昇順に並べました。"); printf("整数Aは%dです。\n", na); printf("整数Bは%dです。\n", nb); return (0); }
実行結果
二つの整数を入力してください。 整数A:57 整数B:21 これらの値を昇順に並べました。 整数Aは21です。 整数Bは57です。
読み込んだ日付の前の日付および次の日付を求めるプログラム
#include <stdio.h> int day[2][13] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, }; /*--- yearが閏年であれば1をそうでなければ0を返す ---*/ int isleap(int year) { return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0); } /*--- 受け取った日付の前の日を求める ---*/ void yesterday(int *y, int *m, int *d) { if (*d != 1) // 1日でなければ*dをデクリメント (*d)--; else { if (*m != 1) // 1月以外の1日 (*m)--; else { (*y)--; *m = 12; } *d = day[isleap(*y)][*m]; } } /*--- 受け取った日付の次の日を求める ---*/ void tomorrow(int *y, int *m, int *d) { if (*d != day[isleap(*y)][*m]) // 最終日でなければ*dをインクリメント (*d)++; else { if (*m != 12) // 12月以外の最終日 (*m)++; else { // 12月31日 (*y)++; *m = 1; } *d = 1; } } int main(void) { int y, m, d; int ay, am, ad; int by, bm, bd; printf("年:"); scanf("%d", &y); printf("月:"); scanf("%d", &m); printf("日:"); scanf("%d", &d); ay = by = y; am = bm = m; ad = bd = d; yesterday( &ay, &am, &ad); // 前の日 tomorrow( &by, &bm, &bd); // 次の日 printf("前の日:%d年%d月%d日\n", ay, am, ad); printf("次の日:%d年%d月%d日\n", by, bm, bd); return (0); }
実行結果
年:2000 月:2 日:20 前の日:2000年2月19日 次の日:2000年2月21日
二つの整数の和、差、積を求めるプログラム
#include <stdio.h> /*--- n1とn2の和・差・積をsum,diff,mulが指す変数に格納 ---*/ void sum_diff_mul(int n1, int n2, int *sum, int *diff, int *mul) { *sum = n1 + n2; *diff = (n1 > n2) ? n1 - n2 : n2 - n1; *mul = n1 * n2; } int main(void) { int na, nb; int wa, sa, seki; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); sum_diff_mul(na, nb, &wa, &sa, &seki); printf("和は%dです。\n差は%dです。\n積は%dです。\n", wa, sa, seki); return (0); }
実行結果
二つの整数を入力してください。 整数A:45 整数B:20 和は65です。 差は25です。 積は900です。