Jason. Cała informatyka w jednym miejscu!

Czas na sfinalizowanie tablic w języku C! Oto Waszym oczom ukazują się ostatnie akapity odnośnie różnorodności tablic. Sam jestem zaskoczony, że jest tego aż tyle. Okazuje się po tym wszystkim, że tablica w języku C nie kończy się na jednym sposobie budowania. Zaprezentowałem Wam już wiele metod, a teraz czas na tę ostatnią odmianę jaką jest literał złożony w języku C. Co prawda, to nie dotyczy stricte tablic, bo w ten sposób można definiować również struktury, aczkolwiek skoro nadal przy tym jesteśmy, załatwmy to raz-dwa i zamknijmy za sobą drzwi.

LITERAŁ ZŁOŻONY W JĘZYKU C DLA TABLIC

Przed Wami kolejny zapis istniejący od standardu C99, który pozwala utworzyć tablicę, jednak jest ona traktowana jako stała czy też "anonimowa", to znaczy nieprzydzielana do żadnego miejsca w pamięci. Ostatecznie może być "podpięta" do wskaźnika, jednak częściej znajduje swoje miejsce jako sztywno "wszczepiona" do funkcji jako parametr "tymczasowy". Składnia jest taka:

(int [3]) {5, 10, 15};

Sama taka tablica niczego nie wnosi, to tak jak gdybyśmy wstawili sam średnik. Taka instrukcja nie ma żadnego wpływu na przebieg. Możemy podstawić pod wskaźnik tego samego typu i przypisać adres pierwszego jej argumentu. Wówczas literał złożony w języku C będzie zachowany:

int *p = (int [3]) {5, 10, 15};

To prawda, że więcej komplikacji niż pożytku, dlatego więcej szczegółów podawać nie zamierzam. Przejdźmy od razu do kodu źródłowego:

#include <stdio.h>

int sum(int array[], int n);

int main(void)
{
	(int [3]) {13, 456, -67};			// literał złożony w języku C
	(int []) {510, 780, 56, -74};
	
	int *p = (int [3]) {670, 34, -800};
	
	int totalA = sum((int []) {7, 8, 5, 3, 2, 35, -70}, 7);
	int totalB = sum(p, 3);
	
	printf("Total A = %d\n", totalA);
	printf("Total B = %d\n", totalB);
	getchar();
	
	return 0;
}

int sum(int array[], int n)
{
	int total = 0;
	
	for (int i = 0; i < n; ++i)
	{
		total += array[i];
	}
	
	return total;
}

Przyglądając się funkcji "main" możemy dostrzec niejeden literał złożony, z czego dwa z nich zanikają zaraz po zdefiniowaniu, a trzeci jest "podpięty" do wskaźnika tego samego typu. Czwarty jest osadzony jako tymczasowy parametr do funkcji sumującej argumenty. Budowa może wzbudzać niechęć, natomiast zawsze wolę zaprezentować żywy przykład, abyście od razu byli świadomi z czym macie do czynienia. Co komu da sam termin ;)?


W taki oto sposób zamykam etap samych tablic. Literał złożony w języku C to ostatnia rzecz, o której chciałem napisać w jednym ciągu.

PODOBNE ARTYKUŁY