مرحباً بك،
الخطأ الذي يظهر هو كالتالي:
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;
}
بإمكانك تجربة هذه الطريقة من خلال هذا : الرابط
بالتوفيق.