أسماء عبدالله محمود النظاري نشر 26 نوفمبر 2020 أرسل تقرير نشر 26 نوفمبر 2020 ممكن توضيج الخطأ في هذا البرنامج اقتباس
0 Wael Aljamal نشر 26 نوفمبر 2020 أرسل تقرير نشر 26 نوفمبر 2020 مرحبا، هل يمكنك عرض رسالة الخطأ عند تنفيذ البرنامج! و نسخ الشيفرة البرمجية أيضا شكرا لك اقتباس
0 أسماء عبدالله محمود النظاري نشر 27 نوفمبر 2020 الكاتب أرسل تقرير نشر 27 نوفمبر 2020 بتاريخ On 26/11/2020 at 22:55 قال Wael Aljamal: مرحبا، هل يمكنك عرض رسالة الخطأ عند تنفيذ البرنامج! و نسخ الشيفرة البرمجية أيضا شكرا لك أظهر المزيد #include <iostream> using namespace std; int i, j; int *print(int **arr, int m, int n) { for (i = 0; i < 3; i++) for (j = 0; j < n; j++) return (*(arr+i) + j); } int main() { int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int m = 3, n = 3; int (*mm)[3]=arr; // We can also use "print(&arr[0][0], m, n);" int **p= print(mm, m, n); for (i = 0; i < 3; i++) for (j = 0; j < n; j++) cout<< (*(p+i) + j); return 0; 1 اقتباس
0 Wael Aljamal نشر 27 نوفمبر 2020 أرسل تقرير نشر 27 نوفمبر 2020 بتاريخ On 27/11/2020 at 12:09 قال أسماء عبدالله محمود النظاري: #include <iostream> using namespace std; int i, j; int *print(int **arr, int m, int n) { for (i = 0; i < 3; i++) for (j = 0; j < n; j++) return (*(arr+i) + j); } int main() { int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int m = 3, n = 3; int (*mm)[3]=arr; // We can also use "print(&arr[0][0], m, n);" int **p= print(mm, m, n); for (i = 0; i < 3; i++) for (j = 0; j < n; j++) cout<< (*(p+i) + j); return 0; أظهر المزيد ما هو المطلوب من السؤال بالضبط؟ اقتباس
0 أسماء عبدالله محمود النظاري نشر 27 نوفمبر 2020 الكاتب أرسل تقرير نشر 27 نوفمبر 2020 بتاريخ On 27/11/2020 at 14:09 قال Wael Aljamal: ما هو المطلوب من السؤال بالضبط؟ أظهر المزيد تمرير مصفوفة ثنائية بالبوينترز للدالة اقتباس
0 سمير عبود نشر 27 نوفمبر 2020 أرسل تقرير نشر 27 نوفمبر 2020 مرحباً بك، الخطأ الذي يظهر هو كالتالي: cannot convert 'int (*)[3]' to 'int**' ما يعني أن الدالة print المفروض تستقبل وسيط من النوع **int لكن ما تم تمريره هو int (*)[3] و هو نوع المُتغير mm بطبيعة الحال يجب توحيد الأنواع حتى لا تحدث أخطاء هناك طريقتين إما بتعديل نوع الوسيط او المُعامل أو تعديل نوع المتُغير الذي تم تمريره كوسيط الطريقة الأولى بإمكانك تعديل الدالة print للشكل التالي: int* print(int (*arr)[3], int m, int n) { for(i = 0; i < 3; i++) for(j = 0; j < n; j++) return (*(arr+i) + j); } بالإضافة إلى تعديل السطر التالي: int** p = print(mm, m, n); إلى int* p = print(mm, m, n); لأن ما تُرجعه الدالة print هو مؤشر(pointer) و ليس مؤشر على مؤشر(pointer to pointer) بإمكانك تجربة الطريقة من خلال هذا : الرابط الطريقة الثانية تعديل نوع المُتغير الذي تم تمريره كوسيط بهذا الشكل: int main() { int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int m = 3, n = 3; int *mm[3]; for (int i = 0; i < 3; ++i) { mm[i] = arr[i]; } int* p = print(mm, m, n); for(i = 0; i < 3; i++) for(j = 0; j < n; j++) cout << (*(p+i) + j); return 0; } بإمكانك تجربة هذه الطريقة من خلال هذا : الرابط بالتوفيق. 2 اقتباس
0 Hamada Sayed نشر 28 نوفمبر 2020 أرسل تقرير نشر 28 نوفمبر 2020 مرحبا تصحيح الاخطاء بتاريخ On 27/11/2020 at 12:09 قال أسماء عبدالله محمود النظاري: #include <iostream> using namespace std; int i, j; int *print(int **arr, int m, int n) { for (i = 0; i < 3; i++) for (j = 0; j < n; j++) return (int*)((arr+i) + j); } int main() { int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int m = 3, n = 3; int (*mm)[3]=arr; // We can also use "print(&arr[0][0], m, n);" int *p= print((int**)mm, m, n); for (i = 0; i < 3; i++) for (j = 0; j < n; j++) cout<< (*(p+i*m) + j); return 0; } أظهر المزيد التصحيح تم باستخدام GCC 1 اقتباس
السؤال
أسماء عبدالله محمود النظاري
ممكن توضيج الخطأ في هذا البرنامج
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.