برگرداندن یک آرایه از یک تابع در C++ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

برگرداندن یک آرایه از یک تابع در C++

0 امتیاز

سلام دوستان. در برنامه زیر می خوام در ابتدا آرایه را به یک تابع مرتب سازی بدهم و بعدش آن را درون یک آرایه دیگر بریزم و سپس خروجی آرایه را چاپ کنم. مشکلی که وجود داره نمی دونم چطور باید آرایه از تابع برگشت داده شود.

#include <iostream>
#include <conio.h>
using namespace std;

int selectionSort(int x[]);

int main()
{
	int a[5] = {7, 6, 14, 3, 8};
	int b[5] = selectionSort(a);
	for (int i = 0; i <= 4; i++)
	{
		cout << b[i] << "  ";
	}
	_getch();	
}

int selectionSort(int x[])
{
	int temp;
	for (int i = 0; i < 5; i++)
	{
		for (int j = i + 1; j<5; j++)
		{
			if (x[i] > x[j])
			{
				temp = x[i];
				x[i] = x[j];
				x[j] = temp;
			}
		}
	}
	return x;
}

 

سوال شده مرداد 6, 1393  بوسیله ی Pashmak (امتیاز 644)   8 15 31
ویرایش شده مرداد 6, 1393 بوسیله ی Pashmak

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

برای برگشت دادن آرایه از تابع راه های زیادی هست که توی این لینک توضیح داده شده return کردن آرایه

 

 برای برگشت آرایه از int باید *int استفاده کنین نه int 

int* selectionSort(int x[]);
 

داخل main هم b به همین شکل باید تعریف بشه :

    int *b = selectionSort(a);

اجرا :‌ https://ideone.com/3yP2xh

یک نکته دیگه زمانی که آرایه به تابع ارسال میشه آدرس خونه اول آرایه فرستاده میشه به تابع یعنی این که در مثالی که زدید a که داخل main هست داخل تابع SelectionSort مقدارش عوض میشه که احتمالا چیزی نیست که شما میخواهین پس باید قبل از فرستادن به تابع کپی ازش گرفته بشه , و از اون جایی که زمان ارسال آدرس فرستاده میشه نیازی هم به برگرداندن چیزی نیست .

کپی کردن آرایه با استفاده از std::copy انجام میشه :

#include <iostream>
#include <algorithm>
using namespace std;

void selectionSort(int x[]);

int main()
{
	int a[5] = { 7, 6, 14, 3, 8 };
	int b[5];
	std::copy(std::begin(a), std::end(a), std::begin(b));//copy kardan az aval ta akhar a be aval b
	selectionSort(b);
	for (int i = 0; i <= 4; i++)
	{
		cout << b[i] << "  ";
	}
	cin.get();
}

void selectionSort(int x[])
{
	int temp;
	for (int i = 0; i < 5; i++)
	{
		for (int j = i + 1; j<5; j++)
		{
			if (x[i] > x[j])
			{
				temp = x[i];
				x[i] = x[j];
				x[j] = temp;
			}
		}
	}
}

و این که به جای آرایه توی ++C بهتره که از std::vector استفاده بشه

پاسخ داده شده مرداد 6, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد مرداد 6, 1393 بوسیله ی Pashmak
بابت پاسخ مفصل ممنون
...