2013年3月11日月曜日

C言語の関数中における文字列の交換

文字列を関数の仮引数として渡して、その交換を行う際には多少注意が要る。以下の例では、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 件のコメント:

コメントを投稿

フォロワー

ページビューの合計