Jason. Cała informatyka w jednym miejscu!

Mały kąsek informacji dotyczący tworzenia tablic w języku C. Mimo tego, że przedstawiona tutaj metoda wprowadzania argumentów może jedynie komplikować, to chcę żebyście i tak byli poinformowani o takiej możliwości. Standard języka wprowadzony w 1999 roku przez ISO udostępnia drugi sposób. Po raz kolejny pokażę dwa sposoby celem porównania. Zobaczymy jak wygląda "tradycyjna" tablica w języku C, a potem drugą opcjonalną metodą od standardu C99.

TABLICA W JĘZYKU C MOŻE BYĆ ZDEFINIOWANA NA DWA SPOSOBY

SPOSÓB TRADYCYJNY

Najpierw zaczniemy od ukazania tej pierwszej i częściej używanej metody. Poniższy kod źródłowy przedstawia tworzenie i definiowanie tablicy pięciu liczb całkowitych:

#include <stdio.h>

#define SIZE 5

int main(void)
{
	int numbers[SIZE] = {3, 13, 5, 67, -89};			// tablica w języku C wg ANSI C
	
	for (int i = 0; i < SIZE; ++i)
	{
		printf("numbers[%d] = %d\n", i, numbers[i]);
	}
	
	getchar();
	
	return 0;
}

Darowałem sobie osadzenie wypisywania argumentów do osobnej funkcji, aby już nie cudować. Na samym początku funkcji "main" tworzona jest tablica w języku C według standardu ANSI C z 1989 roku. "Zabezpieczamy się" poprzez korzystanie ze stałej wyznaczającej granicę tablicy i wprowadzamy w klamerkach jedną wartość po drugiej. Proste i zrozumiałe. Dodatkowa informacja jest taka, że nie musimy podawać wszystkich wartości na tym etapie. Wówczas każdy pominięty argument otrzyma wartość równą zero. Grunt, żeby nie zostawiać tablicy kompletnie bez inicjalizacji bo wtedy pojawiają się kłopoty.

SPOSÓB STANDARDU C99

A tak wygląda drugi sposób istniejący od 1999 roku (co z tego, że ma już ponad dwadzieścia lat?):

#include <stdio.h>

#define SIZE 5

int main(void)
{
	int numbers[SIZE] = {[0] = 3, [1] = 13, [2] = 5, [3] = 67, [4] = -89};			// tablica w języku C od standardu C99
	
	for (int i = 0; i < SIZE; ++i)
	{
		printf("numbers[%d] = %d\n", i, numbers[i]);
	}
	
	getchar();
	
	return 0;
}

Tutaj już są potrzebne wyjaśnienia. Otóż nowszy zapis polega na dodaniu przedrostka w postaci indeksu w nawiasach kwadratowych i znaku równości. Tutaj zaprezentowałem wprowadzanie indeksów po kolei, natomiast wcale nie musi tak być. Można połączyć tradycyjny zapis z powyższym i wtedy tablica w języku C wygląda na przykład tak:

int numbers[SIZE] = {3, 13, [2] = 5, [3] = 67, -89};

Można też podawać w dowolnej kolejności, to znaczy najpierw przypisać wartość ostatniemu indeksowi albo zacząć od środka, albo trochę tak i trochę tak:

int numbers[SIZE] = {[4] = -89, [1] = 13, [0] = 3, [2] = 5, 67};

Trzeba tylko uważać na dwie rzeczy! Tablica w języku C wg standardu C99 działa w taki sposób, że podając indeks przy jednym argumencie, kolejne wartości bez tego przedrostka są przypisywane po kolei następnym argumentom. Zatem dla przykładu taki zapis:

int numbers[SIZE] = {[4] = -89, [1] = 13, 3, 5, 67};

spowoduje, że pierwszy argument ([0]) przyjmie wartość zero bo nie posiada przypisanego argumentu, drugi o indeksie #1 będzie równy 13, liczba 3 zajmie indeks #2, piątka trafi do trzeciego indeksu, a 67 znajdzie się pod czwartym indeksem mimo tego, że na samym początku przypisaliśmy liczbę -89! Jeśli indeksy "nachodzą" na siebie, brana jest pod uwagę ostatnia wartość. Bądźcie ostrożni bo taka tablica w języku C może dodatkowo spowodować wykroczenie poza podany zakres. Wówczas kompilator powinien wyświetlić ostrzeżenie typu "excess elements in array initializer", ale nie można tego zagwarantować.


Wątpię w szerokie grono zwolenników takiego zapisu, zbyt dużo pułapek moim zdaniem. Tak czy siak, warto zawsze wiedzieć, że macie taką możliwość, o ile kompilator wspiera standard C99.

PODOBNE ARTYKUŁY