لغة البرمجة ج هي واحدة من الأكثر شعبية وتستخدم على نطاق واسع في مختلف مجالات تطوير البرمجيات. واحدة من القضايا الهامة للمبرمجين ج هو إرجاع صفيف من وظيفة. في هذه المقالة ، سننظر في طرق مختلفة لإرجاع مصفوفة من دالة في لغة ج.
هناك عدة طرق لحل هذه المشكلة. واحدة من أسهل الطرق هي استخدام مؤشر إلى صفيف. للقيام بذلك ، قم بتعريف وظيفة ستعيد المؤشر إلى صفيف ، ثم قم بإنشاء مصفوفة ديناميكية في الوظيفة نفسها وإرجاع المؤشر الخاص بها. على سبيل المثال:
إنت * ريتيراراي (حجم إنت) {
إنت * أر = مالوك(حجم * سيزوف(إنت));
عودة آر;
}
في هذا المثال ، تأخذ الدالة ريتيراراي حجم الصفيف كوسيطة وإرجاع مؤشر إلى صفيف كثافة العمليات. داخل الدالة ، يتم تخصيص الذاكرة للمصفوفة باستخدام وظيفة مالوك ، ثم يتم إرجاع مؤشر إلى هذه الذاكرة. عند الإخراج ، سيكون لدينا مؤشر إلى مصفوفة يمكن استخدامها في وظائف أخرى.
هناك طريقة أخرى وهي تمرير مؤشر إلى مصفوفة كوسيطة إلى دالة. في هذه الحالة ، تحتاج إلى إعلان دالة تأخذ مؤشرا إلى مصفوفة وتغير قيمها. على سبيل المثال:
في هذا المثال ، تأخذ دالة موديفياراي مؤشرا إلى مصفوفة وتعدل قيمها عن طريق تعيين فهارس لعناصر المصفوفة. قبل استدعاء الدالة ، يجب عليك إنشاء مصفوفة وتمرير مؤشرها كوسيطة. بعد تنفيذ الوظيفة ، سيتم تغيير قيم الصفيف.
وبالتالي ، هناك عدة طرق لإرجاع مصفوفة من دالة ج. يعتمد اختيار الطريقة على المهمة المحددة ومتطلبات البرنامج.
- كيفية إرجاع مصفوفة من دالة في ج
- إنشاء وظيفة تقوم بإرجاع صفيف
- تحديد حجم ونوع المصفوفة
- ملء صفيف داخل وظيفة
- إرجاع مصفوفة من دالة
- الطريقة 1: الصفيف العالمي
- الطريقة 2: إرجاع المؤشر
- الطريقة 3: إرجاع مؤشر مع طول المصفوفة
- الطريقة 4: استخدام مصفوفة ديناميكية
- مثال على استخدام الوظيفة
- سؤال وجواب
- كيف يمكنني إرجاع مجموعة من وظيفة في ج?
- هل من الممكن إرجاع مصفوفة من دالة في ج?
- كيفية إرجاع صفيف بشكل صحيح من وظيفة في ج?
- هل من الممكن استخدام صفيف ثابت كقيمة إرجاع دالة في ج?
كيفية إرجاع مصفوفة من دالة في ج
في اللغة ج ، لا يمكن إرجاع المصفوفات مباشرة من الوظائف ، ولكن يمكنك استخدام المؤشرات لتمرير عنوان العنصر الأول من المصفوفة وتغيير قيمها داخل الوظيفة.
لإرجاع مصفوفة من دالة ، تحتاج أولا إلى إنشاء مصفوفة داخل الدالة ، ثم إرجاع مؤشر إلى العنصر الأول من هذه المصفوفة.
مثال:
# تشمل
// وظيفة تقوم بإرجاع مؤشر إلى صفيف
إنت * كريتيراي (طول إنت) {
// إنشاء مصفوفة داخل الوظيفة
إنت * صفيف = (إنت*)مالوك (طول * سيزوف(إنت));
// ملء القيم
ل (إنت أنا = 0 ؛ أنا < طول ؛ أنا i) {
صفيف [أنا] = أنا + 1;
}
عودة صفيف;
}
كثافة العمليات الرئيسية () {
طول كثافة العمليات = 5;
// استدعاء دالة لإنشاء مصفوفة
إنت * مياراي = كريتيراي (طول);
// إخراج عناصر المصفوفة
ل (إنت أنا = 0 ؛ أنا < طول ؛ أنا i) {
برينتف ("٪د " ، مياراي [أنا]);
}
// تحرير الذاكرة المخصصة للمصفوفة
مجانا (مياراي);
العودة 0;
}
، الذي يعيد المؤشر إلى صفيف. يتم إنشاء مصفوفة داخل الدالة ، مليئة بالقيم ، ويتم إرجاع مؤشر إلى بداية المصفوفة.
، والتي ترجع مؤشرا إلى المصفوفة التي تم إنشاؤها. ثم يتم عرض عناصر هذه المصفوفة على الشاشة.
. هذا ضروري لتجنب تسرب الذاكرة.
إنشاء وظيفة تقوم بإرجاع صفيف
تسمح لك لغة البرمجة ج بإنشاء وظائف يمكنها إرجاع المصفوفات.
يمكن أن يكون الصفيف الذي تم إرجاعه من أي نوع بيانات ، على سبيل المثال ، الأعداد الصحيحة أو السلاسل أو الهياكل.
لإنشاء دالة تقوم بإرجاع مصفوفة ، يجب عليك أولا تحديد نوع بيانات عناصر المصفوفة ، ثم تحديد نوع الإرجاع الخاص بها في إعلان الوظيفة.
مثال على إعلان دالة تقوم بإرجاع مصفوفة من الأعداد الصحيحة:
#include
int* createArray(int size) {
int* arr = (int*)malloc(size * sizeof(int)); // выделение памяти под массив
return arr;
}
int main() {
int size = 5;
int* array = createArray(size); // вызов функции для создания массива
// использование массива
for (int i = 0; i < size; i++) {
array[i] = i + 1;
printf("%d ", array[i]); // вывод элементов массива
}
free(array); // освобождение памяти, выделенной под массив
return 0;
}
تأخذ وظيفة كريتيراي () وسيطة واحدة-حجم المصفوفة. داخل الوظيفة ، يتم استخدام وظيفة مالوك () لتخصيص الذاكرة لمجموعة من الحجم المطلوب. ثم يتم إرجاع المؤشر إلى المصفوفة من الوظيفة.
في الوظيفة الرئيسية () ، يتم استدعاء وظيفة كريتيراي () لإنشاء مجموعة من الأعداد الصحيحة من حجم 5. ثم يتم استخدام المصفوفة ، على سبيل المثال ، لملء العناصر وعرضها على الشاشة. بعد استخدام المصفوفة ، يتم تحرير الذاكرة المخصصة لها باستخدام الوظيفة المجانية ().
تحديد حجم ونوع المصفوفة
في ال لغة البرمجة ج ، يتم تحديد حجم ونوع المصفوفة في وقت إعلانها. اعتمادا على نوع البيانات المخزنة في المصفوفة ، قد يختلف حجمها.
يحدد نوع البيانات المستخدم لإنشاء المصفوفة عدد البايتات المخصصة لكل عنصر من عناصر المصفوفة. على سبيل المثال ، إذا كان نوع البيانات هو نوع صحيح إنت ، ثم كل عنصر من عناصر المصفوفة سوف تحتل سيزوف(إنت) بايت.
يتم استخدام حجم المشغل لتحديد حجم المصفوفة. يقوم عامل الحجم بإرجاع الحجم بالبايت الذي يشغله متغير أو نوع بيانات. لتحديد حجم المصفوفة ، تحتاج إلى معرفة حجم كل عنصر وعدد العناصر في المصفوفة:
# تشمل
كثافة العمليات الرئيسية () {
كثافة العمليات [5];
حجم إنت = سيزوف ( أر) / سيزوف (أر[0]);
برينتف ("حجم الصفيف: ٪ د
"،الحجم);
العودة 0;
}
في هذا المثال ، يتم تحديد حجم مجموعة أر ، والذي يتكون من 5 عناصر من نوع إنت. يتم حساب حجم الصفيف على أنه الحجم الإجمالي للصفيف بالبايت(حجم (آر)) مقسوما على حجم عنصر واحد بالبايت(حجم (آر[0])).
ستكون نتيجة تنفيذ البرنامج:
حجم الصفيف: 5وهكذا ، في هذه الحالة ، وحجم مجموعة أر هو 5 ، لأن مجموعة تحتوي على 5 عناصر.
يتم تحديد نوع عناصر المصفوفة بناء على نوع البيانات المحدد عند التصريح عن المصفوفة. على سبيل المثال ، إذا تم الإعلان عن صفيف كما إنت أر [] ، ثم عناصره ستكون من نوع إنت. وبالمثل ، إذا تم الإعلان عن صفيف كما تعويم أر [] ، ثم عناصرها سيكون لها نوع تعويم.
عند العمل مع مصفوفة ، من المهم أن تضع في اعتبارك حجمها ونوع البيانات ، حيث يتيح لك ذلك الوصول إلى عناصر المصفوفة بشكل صحيح وإجراء العمليات اللازمة مع البيانات.
ملء صفيف داخل وظيفة
لملء مصفوفة داخل دالة ج ، يمكننا استخدام طرق مختلفة. يتم إعطاء مثالين أدناه:
1. ملء صفيف مع حلقة
لملء صفيف باستخدام حلقة داخل دالة ، يمكننا استخدام حلقة أو حلقة أثناء. قد يبدو مثل هذا:
# تشمل
ملء الفراغ (صفيف كثافة العمليات [] ، حجم كثافة العمليات) {
ل (إنت أنا = 0; أنا < الحجم ؛ أنا {)
صفيف [أنا] = أنا + 1;
}
}
كثافة العمليات الرئيسية () {
كثافة العمليات الحجم = 5;
صفيف كثافة العمليات [الحجم];
فيلاراي (صفيف ، حجم);
ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {
برينتف ("٪د " ، صفيف [أنا]);
}
العودة 0;
}
في هذا المثال ، تملأ وظيفة فيلاراي المصفوفة بقيم من 1 إلى حجم المصفوفة. ثم يتم عرض قيم الصفيف باستخدام حلقة في الوظيفة الرئيسية.
2. ملء المصفوفة باستخدام إدخال المستخدم
لملء الصفيف بإدخال المستخدم داخل الوظيفة ، يمكننا استخدام وظيفة المسح الضوئي. قد يبدو نموذج التعليمات البرمجية كما يلي:
# تشمل
ملء الفراغ (صفيف كثافة العمليات [] ، حجم كثافة العمليات) {
ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {
برينتف ("أدخل قيمة للعنصر ٪ د:" ، أنا + 1);
سكانف ("٪د " ، ومجموعة [أنا]);
}
}
كثافة العمليات الرئيسية () {
كثافة العمليات الحجم = 5;
صفيف كثافة العمليات [الحجم];
فيلاراي (صفيف ، حجم);
ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {
برينتف ("٪د " ، صفيف [أنا]);
}
العودة 0;
}
في هذا المثال ، تطلب وظيفة فيلاراي من المستخدم قيم لكل عنصر من عناصر المصفوفة وتخزنها في المصفوفة. ثم يتم عرض قيم الصفيف باستخدام حلقة في الوظيفة الرئيسية.
وبالتالي ، يمكننا استخدام طرق مختلفة لملء المصفوفة داخل الوظيفة ، اعتمادا على احتياجاتنا ومتطلبات برنامجنا.
إرجاع مصفوفة من دالة
في ج ، هناك عدة طرق لإرجاع مصفوفة من دالة. قبل النظر في هذه الأساليب ، تجدر الإشارة إلى أن المصفوفات في ج يتم تمريرها بالرجوع إليها ، أي أن الوظيفة تحصل على حق الوصول إلى المصفوفة الأصلية ويمكنها تغيير قيمها.
الطريقة 1: الصفيف العالمي
أبسط طريقة هي إعلان مصفوفة داخل دالة كمتغير عالمي. يمكن الوصول إلى مثل هذه المصفوفة من أي مكان في البرنامج:
// مجموعة عالمية
كثافة العمليات [5];
فيلاراي الفراغ () {
إلى عن على (كثافة العمليات أنا = 0; أنا < 5; أنا i) {
أر [أنا] = أنا + 1;
}
}
كثافة العمليات الرئيسية () {
فيلاراي();
// باستخدام صفيف
إلى عن على (كثافة العمليات أنا = 0; أنا < 5; أنا i) {
برينتف ("٪د " ، أر[ط]);
}
برينتف("
");
العودة 0;
}
الطريقة 2: إرجاع المؤشر
في ج ، يمكنك إرجاع مؤشر إلى مصفوفة من دالة ، ولكن يجب معرفة حجم المصفوفة مسبقا. في المثال التالي ، تقوم الدالة بإرجاع مؤشر إلى مصفوفة من ثلاثة عناصر:
// إرجاع مؤشر إلى صفيف
إنت * كريتيراي () {
ثابت الباحث آر [3];
إلى عن على (كثافة العمليات أنا = 0; أنا < 3; أنا i) {
أر [أنا] = أنا + 1;
}
عودة آر;
}
كثافة العمليات الرئيسية () {
إنت * بتر = كريتيراي();
// استخدام صفيف عبر مؤشر
إلى عن على (كثافة العمليات أنا = 0; أنا < 3; أنا i) {
برينتف ("٪د " ، *(بتر + ط));
}
برينتف("
");
العودة 0;
}
الطريقة 3: إرجاع مؤشر مع طول المصفوفة
طريقة أخرى هي إرجاع مؤشر إلى صفيف مع طوله. وبالتالي ، يمكنك تمرير معلومات حول حجم المصفوفة:
// إرجاع مؤشر إلى المصفوفة وطولها
int* createArrayAndSize(int* size) {
static int arr[4];
*size = 4;
for (int i = 0; i < 4; i++) {
arr[i] = i + 1;
}
return arr;
}
int main() {
int size;
int* ptr = createArrayAndSize(&size);
// Использование массива через указатель и его длины
for (int i = 0; i < size; i++) {
printf("%d ", *(ptr + i));
}
printf("
");
return 0;
}
Способ 4: Использование динамического массива
طريقة أخرى هي تخصيص الذاكرة لصفيف في وظيفة وإرجاع مؤشر إلى تلك الذاكرة. هذا يسمح لك بإنشاء صفائف ذات طول تعسفي:
// باستخدام مصفوفة ديناميكية
إنت * كريتديناميكاراي (حجم إنت) {
إنت * أر = (إنت*)مالوك(حجم * سيزوف(إنت));
ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {
أر [أنا] = أنا + 1;
}
عودة آر;
}
كثافة العمليات الرئيسية () {
كثافة العمليات الحجم = 3;
إنت * بتر = كريتديناميكاراي (حجم);
// استخدام صفيف عبر مؤشر
ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {
برينتف ("٪د " ، *(بتر + ط));
}
برينتف("
");
// تحرير الذاكرة المخصصة
مجانا (بتر);
العودة 0;
}
يمكن تنفيذ إرجاع مصفوفة من دالة في ج بطرق مختلفة. يعتمد اختيار تقنية معينة على متطلبات البرنامج والمرونة التي تريد الحصول عليها عند العمل مع مصفوفة. ستسمح لك الطرق المذكورة أعلاه بإرجاع المصفوفة واستخدامها في البرنامج.
مثال على استخدام الوظيفة
للحصول على مثال توضيحي لاستخدام دالة ، ضع في اعتبارك موقفا يكون فيه من الضروري العثور على المتوسط الحسابي لعناصر المصفوفة.
هناك وظيفة:
تعويم فيندمتوسط (إنت صفيف [] ، إنت حجم) {
مجموع كثافة العمليات = 0;
تعويم المتوسط;
ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {
مجموع + = صفيف [أنا];
}
متوسط = (تعويم)مجموع / حجم;
متوسط العائد;
}
تأخذ هذه الوظيفة كوسائط مجموعة من صفيف الأعداد الصحيحة وحجم حجمها. داخل الدالة ، يتم حساب مجموع جميع عناصر المصفوفة ويتم تقسيم هذا المجموع على حجم المصفوفة للحصول على متوسط قيمة المتوسط. يتم إرجاع النتيجة ، أي المتوسط الحسابي ، من الوظيفة.
مثال على الاتصال واستخدام وظيفة:
كثافة العمليات الرئيسية () {
صفيف كثافة العمليات[] = {1, 2, 3, 4, 5};
حجم كثافة العمليات = حجم (صفيف) / حجم (صفيف [0]);
تعويم المتوسط = البحث عن المتوسط (صفيف ، حجم);
برينتف ("المتوسط الحسابي:٪.2 واو
"،متوسط);
العودة 0;
}
في هذا المثال ، يتم إنشاء صفيف صفيف مع عناصر {1, 2, 3, 4, 5}. ثم يتم حساب حجمها وتمريرها إلى الوظيفة جنبا إلى جنب مع المصفوفة. النتيجة ، أي. يتم تخزين المتوسط الحسابي في المتغير المتوسط وعرضه على الشاشة باستخدام وظيفة برينتف.
نتيجة البرنامج:
المتوسط الحسابي: 3.00وبالتالي ، يوضح المثال استخدام دالة لحل مشكلة معينة-إيجاد المتوسط الحسابي لعناصر المصفوفة.
سؤال وجواب
كيف يمكنني إرجاع مجموعة من وظيفة في ج?
لإرجاع مصفوفة من دالة ج ، يمكنك استخدام مؤشر إلى مصفوفة. حدد دالة بمؤشر إلى نوع إرجاع صفيف ، وبعد تخصيص ذاكرة للمصفوفة ، قم بإرجاع مؤشر إليها من الوظيفة. من الضروري أيضا أن تتذكر أنه يجب تخصيص ذاكرة المصفوفة ديناميكيا باستخدام وظيفة مالوك ().
هل من الممكن إرجاع مصفوفة من دالة في ج?
في ج ، لا يمكن إرجاع المصفوفات بالكامل من الوظائف. ومع ذلك ، يمكنك استخدام مؤشر إلى صفيف وإعادته من وظيفة. تجدر الإشارة أيضا إلى أنه يجب تخصيص ذاكرة المصفوفة ديناميكيا ، وبعد استخدام المصفوفة ، من الضروري تحرير الذاكرة المخصصة باستخدام الوظيفة المجانية ().
كيفية إرجاع صفيف بشكل صحيح من وظيفة في ج?
لإرجاع صفيف بشكل صحيح من وظيفة ج ، تحتاج إلى استخدام مؤشر صفيف. أولا ، تحتاج إلى تخصيص ذاكرة للمصفوفة باستخدام وظيفة مالوك () ، ثم تعبئتها بالبيانات. بعد ذلك ، يمكنك إرجاع المؤشر إلى المصفوفة من الوظيفة. تأكد من عدم نسيان تحرير الذاكرة بعد استخدام المصفوفة باستخدام الوظيفة المجانية ().
هل من الممكن استخدام صفيف ثابت كقيمة إرجاع دالة في ج?
لا ، لا يمكنك استخدام صفيف ثابت كقيمة إرجاع دالة في اللغة ج. الصفيف الثابت له عمر محدود ويتم تحرير ذاكرته تلقائيا. لإرجاع مصفوفة من دالة ، تحتاج إلى استخدام مؤشر إلى المصفوفة وتخصيص الذاكرة لها ديناميكيا باستخدام وظيفة مالوك ().