Hirdetés
- Brogyi: CTEK akkumulátor töltő és másolatai
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- Lalikiraly: Kinek milyen setupja van?
- laskr99: DFI és DFI Lanparty gyűjteményem
- gban: Ingyen kellene, de tegnapra
- GoodSpeed: Keychron V6 Max (HU) Mechanikus vezetéknélküli billentyűzet (Bluetooth, RF, USB)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Oldman2: A KOReader ebook olvasó program
Új hozzászólás Aktív témák
-
dobragab
addikt
válasz
maestro87 #5683 üzenetére
"Összetett literális".
Alaptípusokra, mint amilyen az
int
, azunsigned long
, adouble
, tudsz a programkódba beágyazott konstansokat írni. Pl:0
,25UL
,0x0badc0de
,4.6f
,0.001
. Speciális literal még a string literal, amit így ismersz:"Hello world!\n"
.Struktúrákra, union-okra, tömbökre C89-ben ilyet csak inicializálásnál tudsz:
struct Pont p = {5, 12};
int arr[] = {1, 2, 3, 5, 8, 13, 21};
p = {12; -5}; // <- ERROR
p.x = 12;
p.y = -5; // <- macerásC99 behoz ezzel kapcsolatban két feature-t, a compound literal és a designated initializer.
Compound literal
Arra való, hogy a programkódban ne csak ilyen alaptípusokat, hanem összetett típusokat is meg lehessen adni egyetlen kifejezésben. Ehhez ugyanaz a szintaxis, mint az inicializálásnál, konyhanyelven annyi különbséggel, hogy a kapcsos zárójel tartalmát az adott típusra kell "cast-olni".
p = (struct Pont){12; -5};
struct Pont Pont_tukroz(struct Pont p)
{
return (struct Pont){p.y, -p.x};
}
struct Pont q = Pont_tukroz((struct Pont){10, 13});printf("%p\n", (int[]){1});
double osszeg = double_osszeg((double[]){1.0, 2.718, M_PI}, 3);Ezek a "változók" temporális objektumok, nincs nevük, nem képezheted a címét, mint ahogy ez is értelmetlen:
printf("%p", &1);
Élettartamuk a blokk végéig tart (bezáró
}
), nem úgy, mint C++-ban, ahol a pontosvesszőig (jó, nem pont így van a szabványban, de megközelítőleg pontos).Designated initializer
C-ben a struktúrák adattagjait közvetlenül érjük el, szinte mindig név szerint.
void Pont_kiir(struct Pont p)
{
printf("(%d, %d)", p.x, p.y);
}Kivéve: inicializálásnál.
struct Pont p = {5, 12};
Ez egyértelműnek tűnik, az
x
koordináta 5 lesz, azy
pedig 12. De mi történik, ha valami bunkó így definiálta astruct Pont
-ot?struct Pont
{
int y;
int x;
}Ilyenkor minden működik tovább, kivéve az inicializálást, akkor pont fordítva történnek a dolgok, mint ahogy az ember elképzelte. Ezért vezették be, hogy a struktúrákat inicializálni is lehessen név szerint:
struct Pont p = {.x = 5, .y = 12};
Természetesen compound literal-lal együtt is használható.
p = {.x = 5, .y = 12};
És nem csak struktúrákra, tömbökre is.
int arr[] = {[0] = 8, [1] = 13, [2] = 21};
Sőt, vegyesen is.
haromszog_rajzol((struct Pont[])
{
[0] = {.x = 12, .y = 5},
[1] = {.x = -12, .y = 5},
[2] = {.x = 0, .y = 0}
});Jó eséllyel ezeket a te fordítód is támogatja, ha GCC vagy Clang, csak -std=c99 kell neki. MSVC a C99 cuccokat a 2015-ös verzió óta zömmel tudja...
EQMontoya: bocsi a magyar változónevek miatt
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Világ Ninjái és Kódfejtői, egyesüljetek!
- Milyen routert?
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Projektor topic
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Rezsicsökkentés, spórolás (fűtés, szigetelés, stb.)
- Formula-1
- TCL LCD és LED TV-k
- AMD Navi Radeon™ RX 9xxx sorozat
- Vezetékes FEJhallgatók
- További aktív témák...
- GAMING PC! Ryzen 7 5800x , Radeon RX6700XT, 32Gb RAM
- ASUS VZ24EHE 1080p / 75Hz / 60cm (23,8") IPS /1ms válaszidő / Gamer funkciók / FreeSync
- MSI MECH 2X RX 6600 XT - eladó!
- Újszerű Topping D10s - USB DAC 32bit 384KHz DSD256
- PCLab Pro P-689 Ryzen 7 9700x / 32GB DDR5 / RTX 5070 - halk, prémium 1440p/4K gamer PC
- Hp Prodesk 600 G3/ G5/ G6 SFF/ i5 8-9-10 gen / Elitedesk 800 G4 /Win11- Számla, garancia
- GYÖNYÖRŰ APPLE WATCH ULTRA 2 NATURAL TITANIUM 49MM -1 ÉV GARANCIA - MS3715, 98% AKKUMULÁTOR
- Telefon felvásárlás!! Xiaomi Redmi Note 13, Xiaomi Redmi Note 13 Pro, Xiaomi Redmi Note 13 Pro+
- Új Asus Zenbook Pro Duo 14 OLED QHD 120Hz i7-12700H 16GB 1TB Nvidia RTX 3050Ti Studio Win11 Garancia
- Apple iPhone X Space Gray Ikonikus dizájn, Face ID, OLED kijelző 64 GB Használt, megkímélt ,100%
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest