社内研修用のネタ

先日C言語講習でポインタを使った課題。
次回同じ問題をもう一度させたらできるだろうか?

ちなみに元ネタは「C言語ポインタ完全制覇」http://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E5%AE%8C%E5%85%A8%E5%88%B6%E8%A6%87-%E5%89%8D%E6%A9%8B-%E5%92%8C%E5%BC%A5/dp/4774111422

「2つの引数を与えその値を入れ替える関数swapを書け。」

これをいろんな言語でやってみようと思う。


まずはだめだめなグローバル変数を使ったCの書き方。

#include <stdio.h>

int x, y;

void swap(void)
{
	int tmp;

	tmp = x;
	x = y;
	y = tmp;
}


int main(void)
{
	x = 3;
	y = 7;
	printf("before: x = %d, y = %d\n", x, y);
	swap();
	printf("after: x = %d, y = %d\n", x, y);

	return 0;
}

次、教科書通りのCの書き方。ポイントはポインタ(ぼそっ)

#include <stdio.h>

void swap(int *x, int *y)
{
	int tmp;
    
	tmp = *x;
	*x = *y;
	*y = tmp;
}


int main(void)
{
	int x, y;

	x = 3;
	y = 7;

	printf("before: x = %d, y = %d\n", x, y);
	swap(&x, &y);
	printf("after: x = %d, y = %d\n", x, y);

	return 0;
}

次はC++。ほとんど意味はないけどtemplate関数にしてみる。
このスタイルで引数を渡すのは実引数が勝手に書き換わるので個人的には嫌い。

#include <iostream>

template<class T> void swap(T& x, T& y)
{
	T tmp;

	tmp = x;
	x = y;
	y = tmp;
}


int main()
{
	int x, y;

	x = 3;
	y = 7;
	
	std::cout << "before: x = " << x << ", y = " << y << "\n";
	swap(x, y);
	std::cout << "after: x = " << x << ", y = " << y << "\n";

	return 0;
}

後自分がかけそうなのはDelphi, VB, C#, perl, ruby, Javaぐらいかな?
PHPとかJavaScriptとかしらべてみやう。