C uganka

Vse o programiranju na in za PC

Moderatorji: Kroko, tilz0R

C uganka

OdgovorNapisal/-a tilz0R » 10 Feb 2017, 13:26

Kaj naredi spodnja koda? Koliko je sizeof(arr) te kode?

Koda: Izberi vse
char arr[][3] = {
  [1] = {
    1,2,3
  },
  [30] = {
    3,2,3
  }
};
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1815
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 229 krat
Prejel zahvalo: 509 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: C uganka

OdgovorNapisal/-a VolkD » 10 Feb 2017, 13:31

Jaz bi odgovoril samo na drugo vprašanje. Pa še to ne vem če bo prav.

6 by
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 41597
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 9015 krat
Prejel zahvalo: 5132 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: C uganka

OdgovorNapisal/-a S53DZ » 10 Feb 2017, 13:37

Inicializira polje.
31 x 3
Uporabniški avatar
S53DZ
 
Prispevkov: 1164
Pridružen: 18 Jan 2015, 10:58
Kraj: Ljubljana
Zahvalil se je: 204 krat
Prejel zahvalo: 392 krat
Uporabnika povabil: S52O
Število neizkoriščenih povabil: 42

Re: C uganka

OdgovorNapisal/-a VolkD » 10 Feb 2017, 14:02

A je kot indeks arry-a, nujno številski tip ?
Se ne da kot indeks dati subniz neke množice ?
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 41597
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 9015 krat
Prejel zahvalo: 5132 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: C uganka

OdgovorNapisal/-a eboc » 10 Feb 2017, 19:29

31Xvelikost pointerja
eboc
 
Prispevkov: 218
Pridružen: 19 Jan 2015, 11:12
Zahvalil se je: 87 krat
Prejel zahvalo: 34 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 10

Re: C uganka

OdgovorNapisal/-a VolkD » 10 Feb 2017, 19:47

eboc je napisal/-a:31Xvelikost pointerja

To pa ne, kvečjemu 31x 3 velikost by.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 41597
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 9015 krat
Prejel zahvalo: 5132 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: C uganka

OdgovorNapisal/-a Kroko » 10 Feb 2017, 19:48

VC++ vrne neke neumne napake, G++ pa napako "sorry, unimplemented: non-trivial designated initializers not supported".
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4773
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 680 krat
Prejel zahvalo: 1652 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: C uganka

OdgovorNapisal/-a zanka » 10 Feb 2017, 19:52

31 * 3 * sizeof(char), torej 93 bajtov.
Uporabniški avatar
zanka
 
Prispevkov: 2569
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 113 krat
Prejel zahvalo: 254 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 50

Re: C uganka

OdgovorNapisal/-a tilz0R » 11 Feb 2017, 12:03

Koda inicializira array z 31x3 polji, pri char je to 93 bytov načeloma. Indexa 1 in 30 nastavi vrednosti takoj, ostale so načeloma 0, lahko pa so undefined (odvisno ali je stack ali ne).
Kakšen compiler lahko to aligna na 4 in se velikost naenkrat za N poveča.

C++ te sintakse ne podpira.

Več tukaj: https://gcc.gnu.org/onlinedocs/gcc/Desi ... Inits.html
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1815
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 229 krat
Prejel zahvalo: 509 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: C uganka

OdgovorNapisal/-a gumby » 11 Feb 2017, 12:08

Svašta... tole pa res prvič vidim :)
my brain hurts
Uporabniški avatar
gumby
 
Prispevkov: 2573
Pridružen: 14 Jan 2015, 19:49
Kraj: Lendava
Zahvalil se je: 108 krat
Prejel zahvalo: 604 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 63

Re: C uganka

OdgovorNapisal/-a tilz0R » 11 Feb 2017, 12:09

gumby je napisal/-a:Svašta... tole pa res prvič vidim :)


To se dogaja, če preveč gledaš Linux driverje. Tam najdeš vse mogoče tipse&tricke :)
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1815
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 229 krat
Prejel zahvalo: 509 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: C uganka

OdgovorNapisal/-a zanka » 12 Feb 2017, 23:08

Še ena, kaj izpiše naslednji program?
Koda: Izberi vse
#include <stdio.h>

int main(int argc, char **argv) {

  unsigned int a = 0;
  int b = -1;
  if (2 * a < b)
    printf("True\n");
  else
    printf("False\n");

  return 0;
}
Uporabniški avatar
zanka
 
Prispevkov: 2569
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 113 krat
Prejel zahvalo: 254 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 50

Re: C uganka

OdgovorNapisal/-a VolkD » 12 Feb 2017, 23:11

Po moje izpiše "True"
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 41597
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 9015 krat
Prejel zahvalo: 5132 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: C uganka

OdgovorNapisal/-a tilz0R » 12 Feb 2017, 23:12

Jaz tudi menim da izpiše True, čeprav se signed in unsigned tako nikoli ne primerja :D
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1815
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 229 krat
Prejel zahvalo: 509 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: C uganka

OdgovorNapisal/-a gumby » 12 Feb 2017, 23:15

Signed se pretvori v unsigned pred primerjavo, iz -1 tako nastane 0xffff...
my brain hurts
Uporabniški avatar
gumby
 
Prispevkov: 2573
Pridružen: 14 Jan 2015, 19:49
Kraj: Lendava
Zahvalil se je: 108 krat
Prejel zahvalo: 604 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 63

Re: C uganka

OdgovorNapisal/-a VolkD » 12 Feb 2017, 23:15

Pravzaprav bi moral prevajalnik javiti vsaj opozorilo.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 41597
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 9015 krat
Prejel zahvalo: 5132 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: C uganka

OdgovorNapisal/-a zanka » 12 Feb 2017, 23:22

Da, izpiše True, ker se unsigned tip pretvori v signed.

VolkD je napisal/-a:Pravzaprav bi moral prevajalnik javiti vsaj opozorilo.

Ja to bi morala biti privzeta možnost, ampak ni! :?
Uporabniški avatar
zanka
 
Prispevkov: 2569
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 113 krat
Prejel zahvalo: 254 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 50


Vrni se na Programski jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost