Arrays
An array is a contiguous sequence of data items of the same type. An array name is an address, or constant pointer value, to the first element in said array.
Aggregate operations on an array are not valid in C, this means that you cannot
assign an array to another array. To copy an array you must either copy it component-wise
(typically via a loop) or via the memcpy()
function in string.h
.
Example 1: Arrays in practice
#include <stdio.h>
const int N = 5;
int main(void) {
// Allocate space for a[0] to a[4]
int a[N];
int i;
int sum = 0;
// Fill the array
for (i = 0; i < N; i++) {
a[i] = 7 + i * i;
}
// Print the array
for (i = 0; i < N; i++) {
printf("a[%d] = %d\n", i, a[i]);
}
// Sum the elements
for (i = 0; i < N; i++) {
sum += a[i];
}
printf("\nsum = %d\n", sum);
return 0;
}
Example 2: Arrays and Pointers
#include <stdio.h>
const int N = 5;
int main(void) {
int a[N];
int sum;
int *p;
// The following two calls are the same
p = a;
p = &a[0];
// The following two calls are the same
p = a + 1;
p = &a[1];
// Version 1
sum = 0;
for (int i = 0; i < N; i++) {
sum += a[i];
}
// Version 2
sum = 0;
for (int i = 0; i < N; i++) {
sum += *(a + i);
}
}
Example 3: Bubble Sort
#include <stdio.h>
void swap(int *arr, int i, int j);
void bubble_sort(int *arr, int n);
void main(void) {
int arr[] = { 5, 1, 4, 2, 8 };
int N = sizeof(arr) / sizeof(int);
bubble_sort(arr, N);
for (int i = 0; i < N; i++) {
printf("%d: %d\n", i, arr[i]);
}
return 0;
}
void swap(int *arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
void bubble_sort(int *arr, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
}
Example 4: Copying an Array
#include <stdio.h>
#include <string.h>
int main(void) {
// Copying an array component-wise
int array_one[5] = { 1, 2, 3, 4, 5 };
int array_two[5];
for (int idx = 0; idx < 5; idx++) {
array_two[idx] = array_one[idx];
}
// Copying an array via memcpy
memcpy(array_two, array_one, sizeof(int) * 5);
}