Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C प्रोग्रामिंग में कंपाइल टाइम और रनटाइम आरंभिकरण


सरणी आरंभिकरण के दो तरीके

1. कंपाइल टाइम आरंभिकरण (Compile-time Initialization)

मान प्रोग्राम में ही निश्चित होते हैं।

सिंटैक्स


type name[size] = { value_list };

// उदाहरण
int roll[4] = {2, 5, 6, 7};
float area[5] = {23.4, 6.8, 5.5, 7.3, 2.4};
char name[9] = {'T','u','t','o','r','i','a','l','\0'};
char str[] = "Tutorial";  // आकार स्वतः, \0 शामिल

नियम

  • कम मान दिए जाने पर शेष स्वतः 0 होते हैं
  • int a[5] = {1,2}; → {1,2,0,0,0}
  • आकार छोड़ने पर ([]) तत्वों की संख्या से आकार निर्धारित
  • आकार दिए गए मानों से कम नहीं हो सकता

उदाहरण प्रोग्राम

#include <stdio.h>

int main() {
    int arr[5] = {10, 20, 30, 40, 50};
    
    printf("कंपाइल-टाइम आरंभिकृत सरणी:\n");
    for (int i = 0; i < 5; i++)
        printf("arr[%d] = %d\n", i, arr[i]);
    
    return 0;
}

2. रनटाइम आरंभिकरण (Runtime Initialization)

उपयोगकर्ता इनपुट या गणना से मान प्राप्त करना। इसे डायनामिक आरंभिकरण भी कहते हैं।

विधि: scanf() से इनपुट


int n;
printf("आकार: ");
scanf("%d", &n);

int arr[n];  // VLA (C99) या malloc
for (int i = 0; i < n; i++) {
    printf("arr[%d]: ", i);
    scanf("%d", &arr[i]);
}

उदाहरण प्रोग्राम: दो 2D सरणियों का योग/गुणनफल

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

int main() {
    int rows, cols;
    printf("पंक्तियाँ स्तंभ: ");
    scanf("%d %d", &rows, &cols);
    
    // VLA (स्टैक, सीमित आकार)
    int A[rows][cols], B[rows][cols];
    int sum[rows][cols], prod[rows][cols];
    
    // इनपुट A
    printf("सरणी A:\n");
    for (int i = 0; i < rows; i++)
        for (int j = 0; j < cols; j++) {
            printf("A[%d][%d]: ", i, j);
            scanf("%d", &A[i][j]);
        }
    
    // इनपुट B
    printf("सरणी B:\n");
    for (int i = 0; i < rows; i++)
        for (int j = 0; j < cols; j++) {
            printf("B[%d][%d]: ", i, j);
            scanf("%d", &B[i][j]);
        }
    
    // गणना
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            sum[i][j] = A[i][j] + B[i][j];
            prod[i][j] = A[i][j] * B[i][j];
        }
    }
    
    // आउटपुट
    printf("\nयोग:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++)
            printf("%d\t", sum[i][j]);
        printf("\n");
    }
    
    printf("\nगुणनफल:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++)
            printf("%d\t", prod[i][j]);
        printf("\n");
    }
    
    return 0;
}

तुलना

पहलूकंपाइल टाइमरनटाइम
लचीलापननिश्चित आकार/मानउपयोगकर्ता/डेटा अनुसार
मेमोरीस्टैक/डेटा सेगमेंटस्टैक (VLA) या हीप (malloc)
प्रदर्शनथोड़ा तेज (कोई रनटाइम लागत नहीं)आवंटन ओवरहेड
उपयोगज्ञात स्थिर डेटाउपयोगकर्ता इनपुट, फाइल डेटा, गणना

मूल प्रोग्राम की बग्स (सुधार)

  • int sum[i][j] - VLA घोषणा लूप के अंदर, अप्रारंभिकृत i,j के साथ
  • कोई इनपुट नहीं होने पर भी आउटपुट लूप चलते थे → कचरा मान
  • कोई त्रुटि जांच नहीं

सर्वोत्तम अभ्यास

  • छोटे, ज्ञात आकार के लिए कंपाइल-टाइम/स्टैक (VLA)
  • बड़े/अज्ञात आकार के लिए malloc/free (हीप)
  • हमेशा इनपुट सत्यापन करें
  • VLA सावधानी से: स्टैक ओवरफ्लो संभव
  1. C प्रोग्रामिंग भाषा में पॉइंटर्स के ऐरे को समझें C प्रोग्रामिंग भाषा में पॉइंटर्स के ऐरे को समझें

    पॉइंटर एक वेरिएबल है जो दूसरे वेरिएबल का पता स्टोर करता है। विशेषताएं पॉइंटर मेमोरी स्पेस बचाता है। सीधे मेमोरी लोकेशन एक्सेस के कारण पॉइंटर का एक्जीक्यूशन टाइम तेज होता है। पॉइंटर्स की मदद से, मेमोरी को कुशलता से एक्सेस किया जाता है, यानी मेमोरी को डायनामिकली एलोकेट और डीएलोकेट किया जाता है। पॉइ

  1. C भाषा में मोनोलिथिक और मॉड्यूलर प्रोग्रामिंग की व्याख्या C भाषा में मोनोलिथिक और मॉड्यूलर प्रोग्रामिंग की व्याख्या

    मोनोलिथिक प्रोग्रामिंग और मॉड्यूलर प्रोग्रामिंग के बीच अंतर को फायदे और नुकसान के साथ नीचे विस्तार से समझाया गया है। मोनोलिथिक प्रोग्रामिंग यदि हम संपूर्ण प्रोग्राम को एक ही फ़ंक्शन में लिखते हैं, यानी मेन फ़ंक्शन में, तो आप इसे मोनोलिथिक प्रकार की प्रोग्रामिंग कहेंगे। लेकिन, संपूर्ण लॉजिक को एक ही

  1. C प्रोग्राम में O(n) समय और O(1) स्पेस में ऐरे का बायां रोटेशन प्रिंट करें C प्रोग्राम में O(n) समय और O(1) स्पेस में ऐरे का बायां रोटेशन प्रिंट करें

    समस्या विवरण हमें कुछ आकार n का एक ऐरे और कई पूर्णांक मान दिए गए हैं, हमें दिए गए इंडेक्स k से ऐरे को रोटेट करना होगा। उदाहरण इनपुट: arr[] = {1, 2, 3, 4, 5} K1 = 1, K2 = 3, K3 = 6 आउटपुट: 2 3 4 5 1 4 5 1 2 3 2 3 4 5 1 एल्गोरिदम शुरुआत चरण 1: void leftRotate(int arr[], int n, int k) फंक्शन घोषित क