C भाषा मा एरेलाई फङ्सन आर्गुमेन्टको रूपमा पास गर्ने – एक/बहु-आयामिक एरे गाइड

目次

1. परिचय

C भाषा मा एरेलाई आर्गुमेन्टको रूपमा प्रयोग गर्ने कारण

C भाषा मा प्रोग्राम बनाउँदा, एरेलाई अन्य फङ्सनहरूमा प्रयोग गर्न चाहिने परिस्थितिहरू धेरै हुन्छन्। उदाहरणका लागि, डेटासेटको एकैपटक प्रक्रिया वा ठूलो मात्रामा डेटा खोजी/क्रमबद्ध जस्ता कार्यहरू एरेलाई अन्य फङ्सनहरूमा प्रक्रिया गरेर कोडको पुन: प्रयोगयोग्यता बढ्छ।

एरेलाई आर्गुमेन्टको रूपमा पास गर्दा, कोड मोड्युलर हुन्छ र विशिष्ट कार्यहरूलाई फङ्सन अनुसार अलग गर्न सकिन्छ। यसले प्रत्येक फङ्सनलाई स्वतन्त्र रूपमा परीक्षण र डिबग गर्न सजिलो बनाउँछ मात्र होइन, धेरै विकासकर्ताहरूले समानान्तर रूपमा काम गर्दा पनि प्रभावकारी हुन्छ।

यस लेखमा, C भाषा मा एरेलाई आर्गुमेन्टको रूपमा पास गर्ने तरिका र त्यसका ध्यान दिनुपर्ने बुँदाहरूलाई शुरुआतीहरूका लागि सरल रूपमा व्याख्या गर्नेछौं। एक-आयामी एरेदेखि बहु-आयामी एरेसम्म, विशिष्ट कोड उदाहरणहरू सहित व्यावहारिक ज्ञान प्रदान गर्नेछौं।

लक्षित पाठकहरू

यो लेख C भाषा सुरु गरेका शुरुआतीहरूदेखि आधारभूत प्रयोगमा निपुण मध्यवर्ती स्तरका प्रयोगकर्तासम्मलाई लक्षित गर्दछ। यस लेख मार्फत, एरे र फङ्सनको आधारभूत ज्ञान मात्र होइन, एरेको मेमोरी व्यवस्थापन र पोइन्टरबारे पनि सिक्न सकिन्छ, जसले अधिक प्रभावकारी रूपमा प्रोग्राम निर्माण गर्न मद्दत गर्दछ।

2. एरे र पोइन्टरको आधारभूत ज्ञान

एरे नाम र पोइन्टरको सम्बन्ध

C भाषा मा, एरे केवल निरन्तर मेमोरी क्षेत्रलाई प्रतिनिधित्व गर्ने संरचना हो, तर एरे नाम आफैं एरेको सुरुको ठेगाना देखाउने विशेष भूमिका राख्छ। उदाहरणका लागि, int array[5]; जस्तो एरे घोषणा गर्दा, array एरेको सुरुको ठेगाना (&array[0]) देखाउँछ। यसले गर्दा, फङ्सनमा एरे पास गर्दा एरे नामलाई सोझै प्रयोग गर्ने मात्र पर्याप्त हुन्छ, र एरेको सम्पूर्ण सुरुको ठेगाना फङ्सनमा पास हुन्छ।

यो सम्बन्धलाई बुझ्नु महत्त्वपूर्ण छ। किनभने एरे नाम र पोइन्टर C भाषा मा नजिकसँग जडित छन्, र विशेष गरी पोइन्टर गणनालाई बुझ्न आवश्यक अनिवार्य हुन्छ।

एरे नाम र पोइन्टरको भिन्नता

एरे र पोइन्टरमा समानता भएता पनि, केही महत्वपूर्ण भिन्नताहरू पनि छन्। उदाहरणका लागि, एरेको आकार स्थिर हुन्छ, जबकि पोइन्टरको आकार परिवर्तनशील हुन्छ र अन्य मेमोरी क्षेत्रलाई संकेत गर्न पनि सक्छ। थप रूपमा, एरे मेमोरीमा निरन्तर रूपमा व्यवस्थित हुन्छ, तर पोइन्टर अनिवार्य रूपमा निरन्तर मेमोरीलाई संकेत गर्दैन।

तलको कोड उदाहरणलाई सन्दर्भ गर्दा, एरे र पोइन्टरको सम्बन्ध स्पष्ट हुन्छ।

#include <stdio.h>

void printArray(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
}

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    printArray(array, 5);  // एरेको पहिलो ठेगाना पठाउनुहोस्
    return 0;
}

यो कोडमा, printArray फङ्सनले एरेको सुरुको ठेगाना प्राप्त गरी, एरेका प्रत्येक तत्वलाई क्रमशः आउटपुट गर्दछ।

3. एक-आयामी एरेलाई कार्यको तर्कको रूपमा पास गर्ने तरिका

एरेको सुरु ठेगाना पास गर्ने आधारभूत प्रक्रिया

C भाषामा, एरेको सुरु ठेगाना कार्यमा पास गरेर, कार्यभित्र एरेका तत्वहरूलाई सञ्चालन गर्न सकिन्छ। यो एरेलाई सम्पूर्ण प्रतिलिपि गरेर पास गर्ने होइन, स्मृतिको सुरु ठेगाना मात्र पास गर्ने कारणले, प्रभावकारी र स्मृति प्रयोग कम हुने विधि हो।

#include <stdio.h>

void modifyArray(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        arr[i] *= 2;  // एरेको तत्वहरूलाई दुई गुणा गर्नुहोस्
    }
}

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    modifyArray(array, 5);
    for (int i = 0; i < 5; i++) {
        printf("%d ", array[i]);
    }
    return 0;
}

यो कोडमा, modifyArray कार्यले एरेका तत्वहरूलाई २ गुणा परिवर्तन गर्छ। array को सुरु ठेगाना modifyArray मा पास गरिएपछि, array का प्रत्येक तत्व कार्यभित्र सञ्चालन गर्न सकिन्छ।

एरेको तत्व संख्या बताउने तरिका

कार्यमा एरे पास गर्दा, एरेको आकार पनि सँगै पास गर्न आवश्यक हुन्छ। C भाषामा एरेको लम्बाइ प्राप्त गर्ने तरिका नभएको कारण, प्रोग्रामरले म्यानुअली आकार निर्दिष्ट गर्नुपर्छ। माथिको उदाहरणमा, modifyArray कार्यमा तर्कको रूपमा size पास गरेर, एरेको लम्बाइ कार्यभित्र प्रयोग गरिन्छ।

4. बहु-आयामी एरेलाई कार्यको तर्कको रूपमा पास गर्ने तरिका

द्वि-आयामी एरेलाई पास गर्दा ध्यान दिनुपर्ने बुँदा

बहु-आयामी एरेलाई कार्यमा पास गर्दा, C भाषा मा पङ्क्तिको संख्या छुट्याउन सकिए पनि स्तम्भको संख्या छुट्याउन सकिँदैन। यसले गर्दा, कार्यको तर्कको रूपमा द्वि-आयामी एरेलाई पास गर्दा स्तम्भको संख्या निर्दिष्ट गर्न आवश्यक हुन्छ।

#include <stdio.h>

void print2DArray(int arr[][3], int rows) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("n");
    }
}

int main() {
    int array[2][3] = {{1, 2, 3}, {4, 5, 6}};
    print2DArray(array, 2);
    return 0;
}

यहाँ, द्वि-आयामी एरेको स्तम्भ संख्या3 कार्यको तर्कभित्र निर्दिष्ट गरिएको छ। यो निर्दिष्टले कार्यलाई एरेका प्रत्येक तत्वमा सही रूपमा पहुँच गर्न सक्षम बनाउँछ।

परिवर्तनीय लम्बाइ एरेको प्रयोग(C99 पछि)

C99 पछि, परिवर्तनशील लम्बाइ एरे(VLA) परिचय गराइयो, जसले कार्यको तर्कमा लचिलो रूपमा एरेको आकार निर्दिष्ट गर्न सकिन्छ।

#include <stdio.h>

void printFlexibleArray(int rows, int cols, int arr[rows][cols]) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("n");
    }
}

int main() {
    int array[2][3] = {{1, 2, 3}, {4, 5, 6}};
    printFlexibleArray(2, 3, array);
    return 0;
}

परिवर्तनीय लम्बाइ एरेलाई प्रयोग गरेर, स्तम्भ र पङ्क्तिको संख्या लचिलो रूपमा परिवर्तन गर्न सकिन्छ, जसले कार्यभित्र बहु-आयामी एरेलाई सजिलैसँग ह्यान्डल गर्न मद्दत गर्दछ।

5. एरेलाई आर्गुमेन्टको रूपमा पास गर्दा ध्यान दिनुपर्ने बुँदाहरू

एरेको साइज व्यवस्थापनको महत्त्व

जब फङ्क्सनमा एरे पास गरिन्छ, एरेको साइज गलत भएमा मेमोरीको बर्बादी वा बफर ओभरफ्लोको कारण बन्न सक्छ। एरेको साइज व्यवस्थापन सावधानीपूर्वक गर्नुपर्छ, र लूपको सर्तहरू एरेको साइजलाई पार नहोस् भनेर सेट गर्नु महत्त्वपूर्ण छ।

डायनामिक एरे र मेमोरी व्यवस्थापन

डायनामिक मेमोरी आवंटन गर्दा, mallocfree प्रयोग गरेर हीप क्षेत्रमा मेमोरी सुरक्षित गरिन्छ। फङ्क्सनमा डायनामिक एरेलाई ह्यान्डल गर्दा, मेमोरी लिक रोक्नका लागि मुक्त गर्न बिर्सनु नपर्ने कुरामा ध्यान दिनु आवश्यक छ।

फङ्क्सनभित्र एरेको परिवर्तन र साइड इफेक्ट्स

एरेलाई आर्गुमेन्टको रूपमा पास गर्दा, फङ्क्सनभित्रको एरे परिवर्तन फङ्क्सन बाहिर पनि प्रभाव पार्छ। आवश्यक परेमा, एरेको प्रतिलिपि बनाएर सञ्चालन गर्नुहोस्, वा परिवर्तन बाहिर नजाओस् भनेर डिजाइन गर्नुहोस्।

6. बारम्बार सोधिने प्रश्नहरू (FAQ)

एरेको आकार कसरी प्राप्त गर्ने?

C言語मा, कार्यभित्र एरेको आकार सिधै प्राप्त गर्ने तरिका छैन। त्यसैले, एरेको आकार व्यवस्थापन गर्न, एरेको आकार जानकारीलाई कार्यमा आर्गुमेन्टको रूपमा पास गर्न आवश्यक छ। उदाहरणका लागि, void myFunction(int *arr, int size) जस्तै, एरेसँगै आकार पनि पास गर्ने रूप सामान्य हो।

एरेको आकार मुख्य कार्य आदि को परिभाषा स्थानमा sizeof(array) / sizeof(array[0]) प्रयोग गरेर गणना गर्न पनि सम्भव छ। तलको उदाहरणमा, एरेको आकार पत्ता लगाउने तरिका देखाइएको छ।

#include <stdio.h>

void printArray(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
}

int main() {
    int array[] = {1, 2, 3, 4, 5};
    int size = sizeof(array) / sizeof(array[0]);  // एरेको आकार गणना गर्नुहोस्
    printArray(array, size);
    return 0;
}

यो कोडमा, sizeof(array) / sizeof(array[0]) प्रयोग गरेर एरेको तत्व संख्या पत्ता लगाइन्छ, र त्यस आकारलाई आर्गुमेन्टको रूपमा कार्यमा पास गरिन्छ।

डायनामिक एरेको प्रयोग सम्बन्धी प्रश्नहरू

डायनामिक एरे मेमोरीलाई प्रभावकारी रूपमा प्रयोग गर्न चाहिने अवस्थामा वा एरेको आकार निश्चित नभएको अवस्थामा उपयोगी हुन्छ। डायनामिक एरे प्रयोग गर्न, malloc वा calloc कार्यहरूद्वारा हीप क्षेत्रमा मेमोरी आवंटन गर्नुपर्छ, र काम समाप्त भएपछि free कार्यद्वारा मुक्त गर्नु अनिवार्य छ।

डायनामिक एरेको उदाहरण तल देखाइएको छ।

#include <stdio.h>
#include <stdlib.h>

void fillArray(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        arr[i] = i * 2;  // प्रत्येक ऐरे तत्वमा मान असाइन गर्नुहोस्
    }
}

int main() {
    int size = 5;
    int *array = (int *)malloc(size * sizeof(int));  // गतिशील मेमोरी आवंटन
    if (array == NULL) {
        printf("मेमोरी आवंटन असफल भयो。\n");
        return 1;
    }
    fillArray(array, size);
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
    free(array);  // मेमोरी मुक्त गर्नुहोस्
    return 0;
}

यहाँ malloc प्रयोग गरेर डायनामिक रूपमा एरेको मेमोरी आवंटन गरिन्छ, र कार्यभित्र एरेको सामग्रीलाई सञ्चालन गरिन्छ। free द्वारा मुक्त गर्न बिर्सनु नपर्ने कुरा महत्त्वपूर्ण छ।

एरे र पोइन्टर मध्ये कुन प्रयोग गर्नु उपयुक्त?

एरे र पोइन्टर नजिकै सम्बन्धित छन्, तर प्रयोगको उद्देश्य अनुसार फरक प्रयोग गर्नु आवश्यक छ। एरे स्थिर लम्बाइको डेटा हो, र पूर्वनिर्धारित आकार भएको अवस्थामा उपयुक्त हुन्छ। अर्कोतिर, पोइन्टर डायनामिक रूपमा मेमोरी सञ्चालन गर्ने स्थितिहरूमा वा परिवर्तनशील लम्बाइको डेटा ह्यान्डल गर्ने बेला उपयोगी हुन्छ।

विशेष गरी ठूलो डेटा संरचना वा परिवर्तनशील लम्बाइको डेटा ह्यान्डल गर्दा, पोइन्टर प्रयोग गरेर मेमोरीलाई डायनामिक रूपमा व्यवस्थापन गर्नु प्रभावकारी हुन्छ। एरेभन्दा पोइन्टर अधिक लचिलो मेमोरी सञ्चालन गर्न सक्षम हुन्छ, त्यसैले C言語को विशेषताहरूलाई उपयोग गर्ने प्रोग्राम बनाउँदा पोइन्टरको समझ अनिवार्य छ।

7. सारांश

एरेलाई आर्गुमेन्टको रूपमा पास गर्दा मुख्य बुँदाहरूको सारांश

यस लेखमा, C भाषामा एरेलाई फङ्क्शनको आर्गुमेन्टको रूपमा पास गर्ने तरिकाबारे, एक-आयामी एरेदेखि बहु-आयामी एरेसम्मको आधारभूत ज्ञान र व्यावहारिक कोड उदाहरणहरू व्याख्या गरिएको छ। एरेलाई आर्गुमेन्टको रूपमा पास गर्दा कोड मोड्युलर हुन्छ, पुन: प्रयोगयोग्यता बढ्छ, तर विशेष गरी बहु-आयामी एरे वा गतिशील एरेको अवस्थामा, पोइन्टर र मेमोरी व्यवस्थापनको समझ आवश्यक हुन्छ।

एरेको आकारलाई सही रूपमा व्यवस्थापन गर्नु, गतिशील मेमोरी प्रयोग गर्दा अनिवार्य रूपमा मेमोरी मुक्त गर्नु आदि, C भाषाको एरे र आर्गुमेन्टको प्रयोगमा केही ध्यान दिनुपर्ने बुँदाहरू छन्। यी कुराहरूलाई ध्यानमा राखेर, C भाषाको प्रोग्रामको गुणस्तर र प्रदर्शनलाई सुधार्न सकिन्छ।

年収訴求