0% found this document useful (0 votes)
36 views41 pages

L4 1 Array

Arrays allow storing multiple values of the same type together in memory. An array is declared with a type, name, and size. Individual elements are accessed using indexes that start from 0. Arrays can be initialized with a list of values. Arrays are useful for problems that require handling a collection of similar data, like finding the minimum of a set of numbers. The examples demonstrate declaring, initializing, accessing, and using arrays to solve problems.

Uploaded by

Erwin Vungu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
36 views41 pages

L4 1 Array

Arrays allow storing multiple values of the same type together in memory. An array is declared with a type, name, and size. Individual elements are accessed using indexes that start from 0. Arrays can be initialized with a list of values. Arrays are useful for problems that require handling a collection of similar data, like finding the minimum of a set of numbers. The examples demonstrate declaring, initializing, accessing, and using arrays to solve problems.

Uploaded by

Erwin Vungu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 41

Arrays in C

Palash Dey
Department of Computer Science & Engg.
Indian Institute of Technology
Kharagpur

Slides credit: Prof. Indranil Sen Gupta


Basic Concept

• Many applications require multiple data items


that have common characteristics.
– In mathematics, we often express such groups of data
items in indexed form:
x1, x2, x3, …, xn
• Why are arrays essential for some applications?
– Take an example.
– Finding the minimum of a set of numbers.

Programming and Data Structure 2


3 numbers
if ((a <= b) && (a <= c))
min = a;
else
if (b <= c)
min = b;
else
min = c;
4 numbers
if ((a <= b) && (a <= c) && (a <= d))
min = a;
else
if ((b <= c) && (b <= d))
min = b;
else
if (c <= d)
min = c;
else
min = d;

Programming and Data Structure 3


The Problem

• Suppose we have 10 numbers to handle.


• Or 20.
• Or 100.

• How to tackle this problem?


• Solution:
– Use arrays.

Autumn Semester 2019 Programming and Data Structure 4


Using Arrays
• All the data items constituting the group share the
same name.
int x[10];

• Individual elements are accessed by specifying the


index.

x[0] x[1] x[2] x[9]

x is a 10-element one-
dimensional array

Programming and Data Structure 5


• The name of the array also denotes the starting
address of the array in memory.
– Example:
int x[10];

x[0], x[1], x[2], … indicates the contents of the


successive array locations.
x indicates the starting address in memory for the array.

Programming and Data Structure 6


An Example
#include <stdio.h>
main()
{
int x[10];
x[0] = 15;
x[1] = x[0] + 5;
printf (”\n%d %d %d %u \n”, x[0], x[1], x[2], x);
}

Output:
15 20 1107384350 3221224640

Garbage Address
Programming and Data Structure 7
Declaring Arrays

• Like variables, the arrays that are used in a program


must be declared before they are used.
• General syntax:
type array-name[size];
– type specifies the data type of element that will be contained in
the array (int, float, char, etc.).
– size is an integer constant which indicates the maximum
number of elements that can be stored inside the array.
• Example: int marks[5];
– marks is an array containing a maximum of 5 integers.

Programming and Data Structure 8


• Examples:
int x[10];
char line[80];
float points[150];
char name[35];
• If we are not sure of the exact size of the array, we can
define an array of a large size.
int marks[50];
though in a particular run we may only be using, say, 10
elements.

Programming and Data Structure 9


How an array is stored in memory?

• Starting from a given memory location, the successive array


elements are allocated space in consecutive memory
locations. int a[10];

Array a
x x+k x+2k

x: starting address of the array in memory


k: number of bytes allocated per array element
– Element a[i] :: allocated memory location at address x + i*k
– First array index assumed to start at zero.

Programming and Data Structure 10


Accessing Array Elements

• A particular element of the array can be accessed by


specifying two things:
– Name of the array.
– Index (relative position) of the element in the array.

• In C, the index of an array starts from zero.


• Example:
– An array is defined as int x[10];
– The first element of the array x can be accessed as x[0], fourth
element as x[3], tenth element as x[9], etc.

Programming and Data Structure 11


Contd.

• The array index must evaluate to an integer between 0


and n-1 where n is the number of elements in the array.
• Any integer expression can be given as the index.
a[x+2] = 25;
b[3*x-y] = a[10-x] + 5;

Programming and Data Structure 12


A Warning

• In C, while accessing array elements, array bounds are not


checked.
• Example:
int marks[5];
:
:
marks[8] = 75;
– The above assignment would not necessarily cause an
error.
– Rather, it may result in unpredictable program results.

Programming and Data Structure 13


Initialization of Arrays
• General form:
type array_name[size] = {list of values};
• Examples:
int marks[5] = {72, 83, 65, 80, 76};
char name[4] = {’A’, ’m’, ’i’, ’t’};
• Some special cases:
– If the number of values in the list is less than the
number of elements, the remaining elements are
automatically set to zero.
float total[5] = {24.2, -12.5, 35.1};
total[0]=24.2, total[1]=-12.5, total[2]=35.1,
total[3]=0, total[4]=0

Programming and Data Structure 14


Contd.

– The size may be omitted. In such cases the compiler


automatically allocates enough space for all initialized
elements.

int flag[] = {1, 1, 1, 0};


char name[] = {’A’, ’m’, ’i’, ’t’};

Programming and Data Structure 15


Example 1: Find the minimum of a set of 10 numbers
#include <stdio.h>
main()
{
int a[10], i, min;

for (i=0; i<10; i++)


scanf (%d, &a[i]);

min = 99999; /* or, min=a[0] */


for (i=0; i<10; i++)
{
if (a[i] < min)
min = a[i];
}
printf (\n Minimum is %d, min);
}

Programming and Data Structure 16


Example 1: Find the minimum of a set of 10 numbers
#include <stdio.h>
main()
{
int a[10], i, min;

for (i=0; i<10; i++)


scanf (%d, &a[i]);

min = a[0];
for (i=0; i<10; i++)
{
if (a[i] < min)
min = a[i];
}
printf (\n Minimum is %d, min);
}

Programming and Data Structure 17


Alternate #include <stdio.h>
Version 1 #define size 10

main()
{
int a[size], i, min;

Change only one for (i=0; i<size; i++)


line to change the scanf (%d, &a[i]);
problem size
min = a[0];
for (i=0; i<size; i++)
{
if (a[i] < min)
min = a[i];
}
printf (\n Minimum is %d, min);
}

Programming and Data Structure 18


Alternate #include <stdio.h>
Version 2 main()
{
int a[100], i, min, n;

scanf (%d, &n);


/* Number of elements */
for (i=0; i<n; i++)
Define an array of
scanf (%d, &a[i]);
large size and use
only the required min = a[0];
number of elements for (i=0; i<n; i++)
{
if (a[i] < min)
min = a[i];
}
printf (\n Minimum is %d, min);
}

Programming and Data Structure 19


#include <stdio.h>
Example 2: #define nsub 6
Computing gpa
main()
{
int grade_pt[nsub], cred[nsub], i,
gp_sum=0, cred_sum=0;
float gpa;

for (i=0; i<nsub; i++)


scanf (%d %d, &grade_pt[i],&cred[i]);
Handling two arrays
at the same time for (i=0; i<nsub; i++)
{
gp_sum += grade_pt[i] * cred[i];
cred_sum += cred[i];
}
gpa = (float) gp_sum / cred_sum;
printf (\n GPA is: %f, gpa);
}
Programming and Data Structure 20
Things you can’t do
int a[20], b[20];

• You cannot
– use “=” to assign one array variable to another:
a = b; /* a and b are arrays */
– use “==” to directly compare array variables:
if (a == b) ………
– directly scanf or printf arrays:
printf (”……”, a);

Programming and Data Structure 21


How to copy the elements of one array to another?

• By copying individual elements:

int a[25], b[25];


……
for (j=0; j<25; j++)
a[j] = b[j];

Programming and Data Structure 22


How to read the elements of an array?

• By reading them one element at a time.

int a[25];
……
for (j=0; j<25; j++)
scanf (%d, &a[j]);

• The ampersand (&) is necessary.


• The elements can be entered all in one line or in different
lines.

Programming and Data Structure 23


How to print the elements of an array?

• By printing them one element at a time.

for (j=0; j<25; j++)


printf (\n %d, a[j]);

– The elements are printed one per line.

printf (\n);
for (j=0; j<25; j++)
printf ( %d, a[j]);

– The elements are printed all in one line (starting with


a new line).

Programming and Data Structure 24


Passing Arrays to a Function
How to pass arrays to a function?

• An array name can be used as an argument to a


function.
– Permits the entire array to be passed to the function.
– The way it is passed differs from that for ordinary
variables.
• Rules:
– The array name must appear by itself as argument,
without brackets or subscripts.
– The corresponding formal argument is written in the same
manner.
• Declared by writing the array name with a pair of empty brackets.

Programming and Data Structure 26


An Example with 1-D Array

main()
{
We can also write int n;
float list[100], avg;
float x[100]; :
But the way the function avg = average(n,list);
is written makes it :
general; it works with }
arrays of any size.
float average(int a, float x[])
{
:
sum = sum + x[i];
}

Programming and Data Structure 27


main()
{
int n, i;
float list[100], avg;
scanf (“%d”, &n);
for (i=0; i<n; ++)
scanf (%d, &list[i]);
avg = average (n, list);
printf (\nAverage is: %d, avg);
}

float average(int a, float x[])


{
float sum = 0; int index;
for (index=0; index<a; index++)
sum = sum + x[i];
return sum;
}

Programming and Data Structure 28


The Actual Mechanism

• When an array is passed to a function, the values of the


array elements are not passed to the function.
– The array name is interpreted as the address of the
first array element.
– The formal argument therefore becomes a pointer to
the first array element.
– When an array element is accessed inside the
function, the address is calculated using the formula
stated before.
– Changes made inside the function are thus also
reflected in the calling program.

Programming and Data Structure 29


Contd.

• Passing parameters in this way is called


call-by-reference.
• Normally parameters are passed in C using
call-by-value.
• Basically what it means?
– If a function changes the values of array elements, then
these changes will be made to the original array that is
passed to the function.

Programming and Data Structure 30


Example: Parameter passed as a value
#include <stdio.h> main()
{
void swap (int a, int b) int x,y;
{
int temp; x=10; y=15;
temp=a; printf(x=%d y=%d \n, x, y);
a=b; swap(x,y);
b=temp; printf(x=%d y=%d \n, x, y);
} }

Output:
x=10 y=15
x=10 y=15

Programming and Data Structure 31


Example: Minimum of a set of numbers

#include <stdio.h> int minimum (int x, int


int minimum (int x[], int y); size)
{
main()
{ int i, min = x[0];
int a[100], i, n;
for (i=0;i<size;i++)
scanf (%d, &n); if (min > x[i])
for (i=0; i<n; i++) min = x[i];
scanf (%d, &a[i]); return (min);
}
printf (\n Minimum is
%d,minimum(a,n));
}

Parameter x passed by reference, size by value.

Programming and Data Structure 32


Example: Square each element of array
#include <stdio.h>
void square (int a[], int b); void square (int x, int
size)
main() {
{ int i;
int a[100], i, n;
for (i=0;i<size;i++)
scanf (%d, &n);
for (i=0; i<n; i++) x[i] = x[i] * x[i];
scanf (”%d”, &a[i]);
return;
square (a, n); }

printf (\nNew array is:);


for (i=0; i<n; i++)
printf ( %d, a[i]);

Programming and Data Structure 33


Introduction to Pointers

• What is the concept?


– Pointer is a variable which stores the address of memory
location of another variable.
– When declared, we must specify the data type of the
variable being pointed to.
– Examples:
int *p;
float *x, *y;
char *flag;

Programming and Data Structure 34


• A pointer variable can be assigned the address of
another variable.
int a, *p;
a=10;
p = &a; /* Address of ‘a’ assigned to ‘p’ */
printf (”%d %d”, a, *p);
/* Will print “10 10” */
• Point to note:
– Array name indicates pointer to first array element.
int num[10], *xyz;
xyz = num; /* Points to x[0] */

Programming and Data Structure 35


– When an integer expression E is added to or subtracted
from a pointer, actually scale factor times E is added or
subtracted.
• Scale factor indicates size of the data item being pointed to in
number of bytes.
• Scale factor for char is 1, int is 4, float is 4, double is 8, etc.

int a, *p;
p = &a; /* p is assigned address of ‘a’
(say, 2500) */
p++; /* p will become 2504 */
p = p – 10; /* p will become 2464 */

Programming and Data Structure 36


• Consider the declaration:
int x[5] = {1, 2, 3, 4, 5};
int *p;
– Suppose that the base address of x is 2500, and each
integer requires 4 bytes.
Element Value Address
x[0] 1 2500
x[1] 2 2504
x[2] 3 2508
x[3] 4 2512
x[4] 5 2516

Programming and Data Structure 37


Contd.

Both x and &x[0] have the value 2500.

p = x; and p = &x[0]; are equivalent.

• Relationship between p and x:


p = &x[0] = 2500
p+1 = &x[1] = 2504
*(p+i) gives the
p+2 = &x[2] = 2508 value of x[i]
p+3 = &x[3] = 2512
p+4 = &x[4] = 2516

Programming and Data Structure 38


• An example:

int x[ ] = {1,2,3,4,5,6,7,8,9,10};
int *p;
p = x + 3; /* Point to 4th element of x */

printf (%d, *p); /* Will print 4 */

printf (%d, *(p+5));


/* Will print 9 */

printf (%d %d, p[3], p[-1]);


/* Will print 7 and 3 */

Programming and Data Structure 39


Example: function to find average

#include <stdio.h> float avg (int array[], int


main() size)
{ {
int x[100], k, n; int *p, i , sum = 0;

scanf (”%d”, &n); p = array;

for (k=0; k<n; k++) for (i=0; i<size; i++)


scanf (”%d”, &x[k]); sum = sum + *(p+i);

printf (”\nAverage is %f”, return ((float) sum / size);


avg (x, n)); }
}

Programming and Data Structure 40


Example: SWAP revisited
#include <stdio.h> main()
{
void swap (int *a, int *b) int x, y;
{
int temp; x=10; y=15;
printf (x=%d y=%d \n, x,y);
temp = *a;
swap (&x, &y);
*a = *b;
printf (x=%d y=%d \n, x,y);
*b = temp;
}
}

Output:
x=10 y=15
x=15 y=10

Programming and Data Structure 41

You might also like