Svetelektro.com

Svetelektro.com

Meno:
Heslo:
SVETELEKTRO • C: velkost pola, na ktore ukazuje pointer

C: velkost pola, na ktore ukazuje pointer

C,C++,C#

Moderátori: psichac, Moderátori

C: velkost pola, na ktore ukazuje pointer

Odosla┼ąod OM0XA » 26 Apr 2017, 12:17

Ahoj

potrebujem zistit velkost pola definovaneho staticky.
K├│d: Vybra┼ą v┼íetko
  const unsigned char Arial5x8[] = {
        0x02, 0x00, 0x80, 0x00, 0x00, 0x00,      // Code for char .
        0x03, 0xC0, 0x3C, 0x03, 0x00, 0x00,      // Code for char /
        0x05, 0x7E, 0x81, 0x81, 0x81, 0x7E,      // Code for char 0
        0x03, 0x04, 0x02, 0xFF, 0x00, 0x00,      // Code for char 1
        0x05, 0x82, 0xC1, 0xA1, 0x91, 0x8E,      // Code for char 2
        0x05, 0x42, 0x81, 0x89, 0x89, 0x76,      // Code for char 3
        0x05, 0x30, 0x2C, 0x22, 0xFF, 0x20,      // Code for char 4
        0x05, 0x4C, 0x8B, 0x89, 0x89, 0x71,      // Code for char 5
        0x05, 0x7E, 0x89, 0x89, 0x89, 0x72,      // Code for char 6
        0x05, 0x01, 0xE1, 0x19, 0x07, 0x01,      // Code for char 7
        0x05, 0x76, 0x89, 0x89, 0x89, 0x76,      // Code for char 8
        0x05, 0x4E, 0x91, 0x91, 0x91, 0x7E,      // Code for char 9
        0x01, 0x84, 0x00, 0x00, 0x00, 0x00       // Code for char :
        };
 


Mam makro, ktore vypocita velkost pola:
K├│d: Vybra┼ą v┼íetko
#define N_ELEMENTS(array) (sizeof(array)/sizeof(array[0]))


Zatial vsetko OK. Teraz urobim pointer na pole:
K├│d: Vybra┼ą v┼íetko
  const unsigned char *znaky=Arial5x8;
   


A toto uz nefunguje:
K├│d: Vybra┼ą v┼íetko
pocet_znakov = ( sizeof(*znaky) / sizeof(znaky[0]) ) ;


sizeof(*znaky) dava velkost 1, cize velkost char a nie velkost celeho pola.
Samozrejme sizeof(znaky) dava velkost pointera, co je OK, ale nie to co potrebujem.
Pripada mi to, ze sizeof(*znaky) berie ako sizeof( znaky[0] ), cize sizeof( *(znaky+0) ).


Aj Herout v knihe toto popisuje, ze by to malo fungovat.
Ma niekto napad? Dakujem.
OM0XA
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 181
Zalo┼żen├Ż: 03.10.2012
Bydlisko: Poprad
Karma: 2

Re: C: velkost pola, na ktore ukazuje pointer

Odosla┼ąod roboulbricht » 26 Apr 2017, 14:20

V ┼żiadnom z be┼żne pou┼ż├şvan├Żch kompil├ítorov nedostane┼í in├Ż v├Żsledok ako 1. Z pointra sa ned├í zisti┼ą ve─żkos┼ą po─ża, na ktor├Ż ukazuje. Preto aj v┼íade vid├ş┼í pri pred├ívan├ş po─ża pomocou pointra do funkcie dva parametre. Prv├Ż je pointer a druh├Ż ve─żkos┼ą po─ża. Jedin├í v├Żnimka sa vyskytuje pri poli znakov, ale tam je to zistite─żn├ę len v─Ćaka tomu, ┼że je za posledn├Żm znakom e┼íte nula a funkcie na spracovanie textov├Żch re┼ąazcov o tom vedia.
roboulbricht
Okoloid├║ci
Okoloid├║ci
Pr├şspevky: 47
Vek: 47.49
Zalo┼żen├Ż: 07.01.2015
Bydlisko: Banská Bystrica
Karma: 3

Re: C: velkost pola, na ktore ukazuje pointer

Odosla┼ąod budvar10 » 26 Apr 2017, 14:58

sizeof je makro, ktor├ę je vyhodnoten├ę u┼ż po─Źas kompil├ície, ─Źi┼że nem├┤┼że vr├íti┼ą ve─żkos┼ą dynamicky alokovan├ęho alebo extern├ęho po─ża.
budvar10
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 311
Zalo┼żen├Ż: 15.12.2014
Bydlisko: Košice
Karma: 7

Re: C: velkost pola, na ktore ukazuje pointer

Odosla┼ąod peterple » 26 Apr 2017, 17:53

OM0XA nap├şsal:Pripada mi to, ze sizeof(*znaky) berie ako sizeof( znaky[0] ), cize sizeof( *(znaky+0) ).

To tak je lebo
K├│d: Vybra┼ą v┼íetko
znaky je presne to ist├ę ako &znaky[0]


Treba si uvedomi┼ą ┼że pole v C nie je objekt, Ale len ukazate─ż na nejak├Ż kus pam├Ąte.
Vizualiz├ícia napr├şklad tu.
https://www.programiz.com/c-programming/c-pointers-arrays

Preto sa ani ned├í kontrolova┼ą index po─ża a ─żahko sa d├í pomocou dobr├ęho indexu dosta┼ą hocikam do pam├Ąte. A┼ż Java a im podobn├Ż urobili z po─ża objekt a to u┼ż je in├í pesni─Źka.
Uk├í┼ż m├║dremu chybu a on sa ti po─Ćakuje. Uk├í┼ż chybu hlup├íkovi a on sa uraz├ş.
peterple
Zasl├║┼żil├Ż ─Źlen
Zasl├║┼żil├Ż ─Źlen
Pr├şspevky: 1353
Vek: 50.49
Zalo┼żen├Ż: 25.06.2013
Bydlisko: Krajn├ę
Karma: 37

Re: C: velkost pola, na ktore ukazuje pointer

Odosla┼ąod martin knocik » 26 Apr 2017, 18:17

Ak nutne potrebujes dynamicke pole a nutne potrebujes zitovat jeho velkost, tak by som mozno pouvazoval o pouzitii c++ jazyka a vektorov. Udajne existuju c kniznice ktore prinasaju c++ vektory do c jazyka
http://mkbci.com

FEL UNIZA 2015, Ing.

─żudstvo je v├şrus ktor├Ż napadol Zem

nerobme si ┼ąa┼żk├║ hlavu z debilov ─Źo n├ím ani po ─Źlenky nesiahaj├║, bu─Ćme radi ┼że my da─Źo dok├í┼żeme a smejme sa im ak├ş s├║ sprost├ş
martin knocik
Zasl├║┼żil├Ż ─Źlen
Zasl├║┼żil├Ż ─Źlen
Pr├şspevky: 1274
Vek: 26.25
Zalo┼żen├Ż: 23.01.2008
Bydlisko: Tren─Źianska Turn├í
Karma: 4


Nasp├Ą┼ą na C,C++,C#

Kto je pr├ştomn├Ż

U┼ż├şvatelia prezeraj├║ci si toto f├│rum: ┼Żiadny registrovan├Ż pou┼ż├şvate─ż a 0 host├ş.

Forums ©
Autor str├ínky je Ondrej Z├ívodsk├Ż(zawin), o graficky design sa star├í ─Żubo┼í Fabo(BUFU).

TOPlist

Powered by Copyright © UNITED-NUKE CMS. All Rights Reserved.
─îas potrebn├Ż k spracovaniu str├ínky 0.20 sek├║nd