文字列を関数の仮引数として渡して、その交換を行う際には多少注意が要る。以下の例では、char *型の変数にポインタを通じてアクセスするので、呼び出す関数ではchar **型にする必要がある。関数に渡すものはアドレスなので、実引数はchar *型変数のアドレスとする必要がある(つまり&をつける)。比較のため、整数型変数を交換する場合と共にそのコードを示す。
#include <stdio.h> void swap_int(int *a, int *b){ int tmp = *a; *a = *b; *b = tmp; } /* 仮引数は*aaではなく**aaになることに注意 */ void swap_str(char **aa, char **bb){ char *tmp = *aa; *aa = *bb; *bb = tmp; } int main(void){ int x = 10; int y = 20; char *a = "hello"; char *b = "world"; printf("x = %d, y = %d\n", x, y); /* x = 10, y = 20 */ swap_int(&x, &y); printf("x = %d, y = %d\n", x, y); /* x = 20, y = 10 */ printf("a = %s, b = %s\n", a, b); /* a = hello, b = world */ swap_str(&a, &b); printf("a = %s, b = %s\n", a, b); /* a = world, b = hello */ return 0; }
0 件のコメント:
コメントを投稿