نسخه قابل چاپ

بخش ۳ - مروری بر توابع و ردکردن پارامترها

در این بخش مروری خواهیم داشت بر انواع رد کردن پارامترها به توابع.

فهرست مثال‌ها

رد کردن پارامتر با مقدار

این برنامه‌ی خیلی ساده رد کردن پارامترها با مقدار (call by value) را نشان می‌دهد.

#include <iostream>
using namespace std;

void f(int x)
{
	int i = 5;
	x = i + 1;
}

int main()
{
	int a = 10;
	f(a);
	cout << a << endl;
	return 0;
}
					
رد کردن پارامتر با ارجاع

این برنامه‌ی خیلی ساده رد کردن پارامترها با ارجاع (call by reference) را نشان می‌دهد. این نوع رد کردن با ارجاع، خاص زبان سی‌پلاس‌پلاس است و در زبان سی این کار با اشاره‌گرها صورت می‌گیرد.

#include <iostream>
using namespace std;

void f(int x, int& y)
{
	int i = 5;
	x = i + 1;
	y = 18;
}

int main()
{
	int a = 10;
	int b = 11;
	f(a, b);			
	cout << a << endl;
	cout << b << endl;
	f(a + 1, b + 1);

	return 0;
}
					
چه خواهد شد ...؟
فراخوانی تودرتوی توابع

این مثال ساده رد کردن پارامتر هنگام فراخوانی‌های متوالی توابع را بررسی می‌کند.

#include <iostream>
using namespace std;

void g(int& y)
{
	int j = 2;
	y = j * 3;
}

void f(int x)
{
	g(x);
	cout << x << endl;
}

int main()
{
	int a = 10;
	f(a);
	cout << a << endl;
	return 0;
}
					
تمرین‌های کوتاه
  1. تابعی تعریف کنید که یک بردار از اعداد را بگیرد و ترتیب عناصر آن را معکوس کند و بردار جدیدی که حاوی این عناصر معکوس هست را برگرداند.
  2. تابع سؤال قبل را طوری تغییر دهید که بردار پارامتر را درجا معکوس کند.
  3. هر یک از دو تابع فوق را برای یک بردار یک میلیون عنصری به تعداد ۱۰۰۰ بار صدا بزنید. با استفاده از دستور time در لینوکس زمان اجرای این دو حالت را اندازه بگیرید و نتیجه را تفسیر کنید.