C Arrays

Introduction to C Arrays

मान लीजिये आप एक ऐसा प्रोग्राम बना रहे है जो employees का नाम computer में store करता है। अब मान लीजिये आपकी company में 200 employees है। आप इन 200 employees के नाम किस तरह से store करेंगे। यदि आप सोच रहे है की आप 200 variables create करेंगे तो ये एक बहुत ही complex approach होगी।

इसमें आपको program बनाने में बहुत समय लग जायेगा और program भी हद से ज्यादा बड़ा हो जायेगा। ये आपके time और computer memory space दोनों का wastage है। और साथ ही आप इतने सारे variables के नाम सोच भी नहीं सकते है और यदि सोच भी लेंगे तो program में यूज़ करने के लिए उन्हें याद तो definitely नहीं रख सकते है।

मेरे पास आपके लिए इससे भी better approach है और उस approach को C language में array कहते है। Array similar type की values का collection होता है। Similar type से यँहा मेरा मतलब एक ही तरह के data type जैसे की int, float, char आदि की values से है।

C आपको arrays के द्वारा ऐसी facility provide करती है की आप सिर्फ एक variable create करे और उस variable में 200 employees के नाम (या जो भी information आप store करना चाहते है) store कर ले।

आप सोच रहे होंगे की एक variable में इतने सारे नाम कैसे store करेंगे। इसके बारे में मुझे आपको बताने में बहुत ख़ुशी होगी। लेकिन उससे पहले आइये देखते है की array को create कैसे करते है।

Creating C Arrays

Array एक structured data type होता है। जैसा की आपने C structures की tutorial में पढ़ा होगा की एक structure में आप कई variables create कर सकते है। यँहा भी situation कुछ कुछ वैसी ही है।

इनमें फर्क सिर्फ इतना होता है की array में सिर्फ ही data type की values store की जाती है और structures में अलग अलग data types के variables create किये जा सकते है।

जब भी आप एक array create करते है तो आप array का नाम और आप उसमे कितनी values store करने वाले है ये define करते है।

जैसे की मान लीजिये आप 5 numbers store करना चाहते है तो उसके लिए आप array create कर सकते है। C में arrays create करने का general structure नीचे दिया गया है।

data_type array-name[size];

size से आप define करते है की आप कितनी values store करना चाहते है।

int num[5];

उपर दिए गए उदाहरण में array का नाम num है और उसमे आप कोई भी 5 integer values store कर सकते है।

Initializing C Arrays

यँहा तक मैने आपको बताया है की array कैसे create करते है। अब आपके सबसे महत्वपूर्ण question पर आते है की आप इस array में 5 values कैसे store करेंगे। में आपको बता दूँ की जब भी आप array create करते है तो जितनी उसकी size होती है उतनी ही locations उस array को memory में allocate हो जाती है। और वो locations उतने ही index numbers के नाम से allocate होती है।

Index numbers हर location का एक unique नाम होता है। जैसे की यँहा ऊपर दिए उदाहरण में 5 index numbers होंगे। आपको एक बात हमेशा याद रखनी चाहिए की array की index हमेशा zero से शुरू होती है।

num[0]
num[1]
num[2]
num[3]
num[4]

Array के नाम और index number से आप create की गयी हर location में value store करवा सकते है और बाद में उससे value access भी कर सकते है।

(Note : Arrays की index हमेशा zero से शुरू होती है। )

जैसे की ऊपर create किये गए array में आप इस प्रकार value insert करवा सकते है।

num[0] = 50;
num[1] = 100;
num[2] = 150;
num[3] = 200;
num[4] = 250;

आप चाहे तो हर location को अलग से value assign करने की बजाय एक साथ भी सभी values को assign कर सकते है। ऐसा आप इस प्रकार कर सकते है।

int num[5] = {50,100,150,200,250};

और यदि आप values यूज़र से run time में store करवाना चाहते है तो ऐसा आप इस प्रकार कर सकते है।

for(int i=0; i<=5; i++)
{
    scanf(“%d”,&num[i]);
}

Accessing Array Elements

अब तक मैने आपको arrays create करना और उनमे values store करना बताया है। इस section में में आपको उन values को access करना बताऊंगा। Array elements को access करके आप उन पर वो सभी operations perform कर सकते है जो आप normal variables के साथ perform कर सकते है। जैसे आप 2 array elements को add करवा सकते है।

जँहा भी array element को access करना चाहते है उस जगह आप array का नाम और index number लिखते है।

num[2] = num[0] + num [1];

यँहा array की first और second values को add करके third location पर store करवाया गया है।

यदि आप किसी एक value को print करवाना चाहते है तो ऐसा आप इस प्रकार कर सकते है।

printf(“%d”,num[3]);

यह statement 4th location की value print करेगा जो की यँहा दिए गए example में 200 है।

यदि आप पुरे array को एक साथ print करना चाहते है तो ऐसा आप loop की मदद से कर सकते है। ये ध्यान रखे की loop उतना ही चले जितनी की values आपके array में है।

for(int i=0; i<=5;i++)
{
    printf(“%d”,num[i]);
}

Example:

#include <stdio.h>
#include <conio.h>
int main()
{
     /* Declaring integer array arr that can store 5 elements */
     int arr[5];
     int i;

     /* Taking array elements at run time from user */
     printf(“Please enter 5 array elements : n”);
     for(i=0;i<=4;i++)
     {
         scanf(“%d”,arr[i]);
     }
     /* Printing all array elements at once */

     printf(“Array is:”);
     for(i=0;i<=4;i++)
     {
          printf(“%dt”,arr[i]);
     }
     return 0;
}
Please enter 5 array elements : 5 4 3 2 1
Array is : 5 4 3 2 1

Two Dimensional Arrays

एक normal array में data list की form में store किया जाता है जिसमें एक के बाद दूसरा element होता है। यदि आप data tabular form में store करना चाहते है तो इसके लिए आप two dimensional array create कर सकते है।

जैसे की आप 4 employees की id और उनका phone number store करना चाहते है। इसके लिए table इस प्रकार बनेगी।

1017599393
1029384940
1039458940
1049129399

इस प्रकार की table आप two dimensional array के द्वारा memory में create कर सकते है।

Creating Two Dimensional Array

Two dimensional array को row और column के संदर्भ में define किया जाता है। सबसे पहले आप array का type define करते है। इसके बाद आप array का एक unique नाम define करते है।

data-type array_name[row][column];

इसके बाद आप जितनी row create करना चाहते है उतनी संख्या angular bracket में define करेंगे। इसके बाद आप जितने columns create करना चाहते है उतनी संख्या दूसरे angular bracket में define करेंगे।

जैसे की ऊपर दी गयी table आप two dimensional array के माध्यम से memory में इस प्रकार create करेंगे।

int myArray[4][2];

यह statement memory में एक table (two dimensional array) create करेगा जिसकी 4 rows और 2 columns होंगे।

Initializing Two Dimensional Array

Two dimensional array को आप किसी variable की तरह initialize कर सकते है। जब आप इस प्रकार initialize करते है तो हर position के लिए separately value assign करते है। उदाहरण के लिए आप पहली row के पहले column में value store करना चाहते है तो ऐसा आप इस प्रकार करेंगे।

myArray[1][1]=101;

इसी प्रकार second column में phone number आप इस प्रकार store कर सकते है।

myArray[1][2]=7599393;

यदि आप user से इस array में value input करवाना चाहते है तो इसके लिए आप 2 loops use करेंगे। पहला loop rows को iterate करेगा और इसे row की संख्या तक ही चलाया जायेगा। दूसरा loop columns को iterate करेगा और इसे भी columns की संख्या तक ही चलाया जायेगा।

for(int i=0;i<4;i++)
{
    for(int j=o;j<2;j++)
    {
          scanf(“%d”,myArray[i][j]);
    }
}

Accessing Two Dimensional Array

Two dimensional array में से यदि आप किसी single element को access करना चाहते है तो ऐसा आप उसकी position index को access करके कर सकते है। उदाहरण के लिए यदि आप 2nd row के 1st column की value print करना चाहते है तो इसके लिए आप इस प्रकार statement लिखेंगे।

printf(“Element at 2nd row 1st column is :%d”,myArray[2][1]);

यदि आप array के सभी elements को एक बार में print करना चाहते है तो इसके लिए आप 2 loops use करते है।

for(int i=0;i<4;i++)
{
    for(int j=o;j<2;j++)
    {
          printf(“%d”,myArray[i][j]);
    }
}

Passing Array to Function

आप चाहे तो एक array को किसी function में argument के रूप में भी pass कर सकते है।

return-type function-name(array-type array-name[])
{
     / * Function code here… */
}
#include<stdio.h>

/* Defining array as parameter of function */
int sum(int num[], int size);

void main()
{
    int num[5] = {2,2,2,2,2};
    int res;
    /* Passing num array as argument to sum function */
    res = sum(num,5);
    printf(“Sum of arrays is %dn”,res);
}

int sum(int num[], int size)
{
    int i;
    int result=0;

    for(i=0;i<size;++i)
    {
        result += num[i];
    }
    return result;
}
Sum of array is 10

Returning Array from Function

Normal variables के अलावा किसी function से array भी return किया जा सकता है। C language में एक complete array को return करना allow नहीं है लेकिन आप array का pointer return कर सकते है। इसके लिए आपको array का नाम बिना index के साथ specify करना होगा।

एक महत्वपूर्ण बात आपको ये ध्यान रखनी चाहिए की C language function के किसी local variable का address return किया जाना allow नहीं करती है। इसलिए आप जिस को return करना चाहते है उसे आपको static define करना होगा।

जिस function से आप array return करना चाहते है उसका return आपको pointer के साथ declare करना होगा। क्योंकि जैसा की मैने पहले बताया C language में array का pointer return करना ही allow है।

return-type * function-name
{
      //Function code here…
}
#include<stdio.h>
int* table(int num);

int* table(int num)
{
     static int tbl[10];
     int i;

     for(i=1;i<=10;i++)
     {
         tbl[i] = num*i;
     }

     /* Returning array */
     return tbl;   
}

int main()
{
    int *t;
    int num;
    int j;

    printf(“Please enter a number to generate its table.n”);
    scanf(“%d”,&num);
    t=table(num);
    printf(“Table of %d is given below : n”,num);

    for(j=1;j<=10;j++)
    {
        printf(“%dn”,t[j]);
    }
    return 0;
}
Please enter a number to generate its table.
2
Table of 2 is given below :
2
4
6
8
10
12
14
16
18
20

Pointer to Array

एक array का नाम constant pointer होता है। यह pointer array के first element को point करता है। जब भी आप कोई array create करते है तो यह pointer automatically create हो जाता है।

इसलिए यदि आप किसी array के नाम को किसी pointer variable को assign करते है तो इसके लिए आपको array के नाम से पहले address of (&) operator define करने की आवश्यकता नहीं होती है। क्योंकि जैसा की मैने पहले बताया एक array का नाम already constant pointer होता है।

उदाहरण के लिए आपने एक array create किया है Num नाम से जिसमें 5 integer numbers है।

int Num[5] = {1,2,3,4,5};

यदि इसी array के नाम को किसी integer pointer variable को assign किया जाता है तो वह variable Num array के first element 1 को point करेगा।

int *n;
n=Num;

इस situation में pointer variable n array के first variable का address hold करता है। यदि इसे value at (*) operator के साथ use किया जाए तो यह variable 1 print करता है। इसी प्रकार आप इस pointer variable द्वारा array के सभी elements को access कर सकते है।

#include<stdio.h>

int main()
{
   int Num[5] = {1,2,3,4,5};
   int *n;

   /* Array Pointer */
   n=Num;

   printf(“%d”,*n+2);

   return 0;
}
3