Ein Array ist ein Vektor mehrerer Variablen gleichen Types, die direkt aufeinanderfolgend im Speicher abgelegt werden. Wikipedia liefert hierzu eine ausführliche Beschreibung.

Das folgende Beispiel zeigt, wie Arrays als lokale Variable angelegt werden können. Dabei ist zu sehen, wie auf die einzelnen Elemente des Arrays zugegriffen wird, sowie sich die Größe eines Arrays im Speicher verhält.

#include <stdio.h>

int main()
{
	int arr[4] = { 1, 2, 3, 4 };

	printf("arr = {%d, %d, %d, %d}\n", arr[0], arr[1], arr[2], arr[3]);

	arr[0] = 11;
	arr[1] = 22;
	arr[2] = 33;
	arr[3] = 44;

	printf("arr = {%d, %d, %d, %d}\n", arr[0], arr[1], arr[2], arr[3]);

	size_t int_size = sizeof(int);
	size_t arr_size = sizeof(arr);

	printf("int_size = %zd\n", int_size);
	printf("arr_size = %zd\n", arr_size);

	printf("arr = %p\n", arr);
	printf("arr[0] = %p\n", &arr[0]);

	return 0;
}

Das Wichtigste nochmal in Kurzfassung

  • Anlegen des Arrays mittels: <Datentyp> <Variablenname>[<Größe>]
  • optional kann das Array mit: ... = { <Initialwerte>, ... } initialisiert werden
  • Zugriff über den Index auf die einzelnen Elemente via: <Variable>[<Index>]
  • Die Größe des Arrays ist im Allgemeinen Größe des Datentyps * Anzahl der Elemente


Wird ein Array angelegt, so ist die Variable eigentlich ein Pointer. Dieser Pointer zeigt auf das erste Element des Arrays. Dies ermöglicht es, Arrays als Funktionsparameter zu verwenden, ohne dass sie dabei kopiert werden.

#include <stdio.h>

int get_at_index(int *arr, int idx)
//int get_at_index(int arr[], int idx)
{
	return arr[idx];
}

int main()
{
	int arr[] = { 1, 2, 3, 5, 7, 11, 17, 19, 23, 29, 31, 37, 41 };
	int x = get_at_index(arr, 4);
	printf("x = %d\n", x);
	return 0;
}

Arrays lassen sich natürlich auch auf dem Heap anlegen. Dazu muss zunächst die Größe des Arrays berechnet werden, damit malloc ausreichend Bytes reservieren kann. Arrays auf dem Heap lassen sich mit realloc außerdem dynamisch vergrößern und verkleinern. Beispiel:

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

void print_arr(int arr[], int len)
{
	printf("arr = {");
	for (int i = 0; i < len; i++) {
		printf("%d, ", arr[i]);
	}
	printf("}\n");
}

int main()
{
	int n = 11;

	int *arr = (int *)malloc(n * sizeof(int));
	memset(arr, 0, n * sizeof(int));

	print_arr(arr, n);

	arr[2] = 3;
	arr[9] = 10;
	//arr[11] = 12;

	print_arr(arr, n);

	n = 3;

	arr = (int *)realloc(arr, n * sizeof(int));

	print_arr(arr, 10);

	//arr[4] = 5;

	free(arr);

	return 0;
}

Last modified: Friday, 18 May 2018, 4:31 PM