الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف تمرر static 2D-array بفنكشن ؟

مغلق
بدأه NullFlag في 29 مايو 2007 · 2 رد · 834 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

يا جماعة فيه شي اغرب من الغريب :)

عرفت static array

int a[3][3];

حاول اسوي لها passing الى فنكشن لكن المشكلة انه كل مره يرفض

int func(int **a)

يرفض هنا تماما لأن التايب مو مثل بعض انا طلع براسي عشر طعش استفهام

قلت اسوي كاست واناظر

func((int**)a);

وصل سليم وما قل فيه اي مشكلة

لكن داخل البودي داخل الفنكشن

int func(int **a)
{
cout<<a[0][0]<<endl;
{

اعطاني سيقمنتيشن فولت

رحت غيرت الكاست

func((int*)a);

وبالبدي حق الفنكشن func

cout<<a[0]<<endl;

والله طبع لي اول element !!!!!!!!

رحت حطيت

cout<<a[8]<<endl;[/code

والله وطبع آخر element !!!

يا جماعة انا استغربت ! ال static 2D-Arrays تمثل بشكل liner ثم يسوي لها مابينق ؟؟

يعني ما تمثل على انها array of pointers each point to another array

لأن هذا هو الشكل الدارج بالـ dynamic arrays الي نسوي لها allocation بال heap؟

السؤال هو كيف نمرر الـ 2D-Array الى فنكشن ؟

#2

الstatic 2D array لها تعامل ثاني ... مختلف شوي وهو لازم لما تكتب إن الدالة الفلانية تستقبل مصفوفة من بعدين على أقل تقدر تحدد عدد الأعمدة . مثل الدالة حقتك لازم يكون التعريف حقها

int func(int a[][3])

لا تنسى أهم شئ عدد الأعمدة ;)

#3

السؤال هو كيف نمرر الـ 2D-Array الى فنكشن ؟

//Note: I did not compile the code
int main()
{
//Sorry i could not write in Arabic, cuz i'm using my friend's computer 

//Since you are passing two dimensional array, you wanna create it dynamically like this:
int** intArray;

//Here, we dynamically create 3*3 array
intArray = new int*[3]
for(int i = 0; i < 3; ++i)
	intArray = new int[3];

//allocate ints 
for(int i = 0; i < 3; ++i)
	for(int j = 0; j < 3; ++j)
		intArray[j] = 5;

	printArray(intArray);
	freeMemory(intArray);

return 0;
}

void printArray(int** array)
{
	for(int i = 0; i < 3; ++i)
		for(int j =0; j < 3; ++j)
			cout << array[j] << endl;
}

void freeMemory(int** array)
{
if(array)
{
	for(int i = 0; i < 3; ++i)
	if(array)
	{
		//Delete the row

		//Delete the memory
		delete [] array;
		//Nullify the pointer
			  array = 0;
	}
	//Delete the colum


	delete [] array;
		  array = 0;
}
}

تم تعديل هذه المشاركة بواسطة Ferrum في 30 مايو 2007 في 11:18

:::كوت بو 6:::

IDE : Microsoft Visual Studio 2005 Pro

هذا الموضوع مغلق.

مواضيع مشابهة