0 Wael Aljamal نشر 26 نوفمبر 2020 أرسل تقرير نشر 26 نوفمبر 2020 مرحبا، هل يمكنك عرض رسالة الخطأ عند تنفيذ البرنامج! و نسخ الشيفرة البرمجية أيضا شكرا لك اقتباس
0 Asma'a نشر 27 نوفمبر 2020 الكاتب أرسل تقرير نشر 27 نوفمبر 2020 بتاريخ On 11/27/2020 at 01: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 بتاريخ 1 ساعة قال أسماء عبدالله محمود النظاري: #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 Asma'a نشر 27 نوفمبر 2020 الكاتب أرسل تقرير نشر 27 نوفمبر 2020 بتاريخ 12 ساعات قال 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 مرحبا تصحيح الاخطاء بتاريخ 23 ساعات قال أسماء عبدالله محمود النظاري: #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 اقتباس
السؤال
Asma'a
ممكن توضيج الخطأ في هذا البرنامج
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.