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

سؤال في الحجز الديناميكي Dynamic Allocation

بدأه مجلـد جديـد في 16 أبريل 2008 · 7 رد · 1,302 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد حجز مصفوفة ذات بعدين من نوع int ولكن ال compiler يرفض !

const int ROW = 6;
const int COL = 7;

int * board = new int[ROW][COL];

رسالة الخطأ

cannot convert `int (*)[7]' to `int*' in initialization

حاولت وضع ارقام بدلا من المتغيرات ولم يقبل :( وتظهر رسالة خطأ مشابهه :

cannot convert `int (*)[6]' to `int*' in initialization

واذا استخدمت هذا السطر :

int board[ROW][COL];

فانه يقبله بدون اي مشكلة .

بيئة التطوير المستخدمة هي dev-c++ ويستخدم مترجم gcc

#2

وعليكم السلام

لايتم الحجز للمصفوفات الديناميكية بهذه الطريقة !!

فرضا اننا سنقوم بحجز مصفوفة ثنائية الابعاد من عندنا

	int a,b;
	cin>>a>>b;

بعدها نحجز بعدد لبعد a عناصر من انواع مؤشرات

	int **p=new int*[a];

بعدها نحجز لكل عنصر بالبعد الاول عدد من العناصر التي تمثل البعد الثاني

	for(int i=0;i<a;i++)
		p=new int;

والان لادخال العناصر

	for(i=0;i<a;i++)
	{
		for(int j=0;j<b;j++)
		{
			cin>>p[j];

		}
	}

تم تعديل هذه المشاركة بواسطة time1 في 16 أبريل 2008 في 13:43

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#3

شكرا على الرد اخي time1

هل هناك اختلاف عند حجز objects من class انا معرفة ؟

مثلا عندي class Node واريد ان احجز مصفوفة ذات بعدين 3*4 من نوع Node ، فهل استخدم نفس الطريقة التي ذكرتها ؟

#4

Yes :D

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#5

السلام عليكم:

هناك طريقة أسهل باستخدام الفكتور

#include <iostream>//cout endl
#include<vector> //vector
#include<cstdlib> //rand() 
using namespace std;
int main()
{
int ROW ;
int COL ;
ROW=5;
COL=7;
vector<vector<int>> board(ROW,vector<int>(COL,0)); //int * board = new int[ROW][COL];

/*هنا احفظ الارقام داخل المصفوفة*/
for(int i=0;i<ROW;i++ )
for(int j=0;j<COL;j++ )
board[j]=rand()%10; 



/*هنا اعرض الارقام التي بداخل المصفوفة*/
for(int i=0;i<ROW;i++ )
{
for(int j=0;j<COL;j++)
cout<<board[j] ; 
cout<<endl;
}

return 0;

}

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 16 أبريل 2008 في 14:00

tvquran_6.gif

#6

لاتنسى تعريف الـ Operators اذا كنت تريد استخدام نفس كيفية الادخال والاخراج

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#7

عندما استخدم طريقة الاخ time1 ، واريد ارسال المؤشر pointer الى دالة آخرى ، فكيف يكون header لهذه الدالة ؟ وللتوضيح :

قمت بتعريف مصفوفة داخل دالة main() بالطريقة التالية :

int **p=new int*[a];
for(int i=0;i<a;i++)
		p=new int;

والآن اريد مناداة دالة print() وارسال المؤشر اليها p اليها ، فيكون تعريف header لدالة print هو

print( int * p)

او

print( int **p)

؟

#8

مرحبا اخي مجددا

بالنسبة للدالة Print طبيعي ان يكون الوسيط (parameter) الذي يمثل المصفوفة هو

print( int **)

لانك قمت بالاعلان عن المصفوفة بانها من نوع

 int **

اي الطريقة الثانية الصحيحة وليست الاولى ,

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

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