Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 11 lip 2026, o 21:56


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 12 lip 2015, o 13:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 kwi 2013
Posty: 38
Lokalizacja: Warszawa
Pomógł: 0

Mam zdefiniowaną jakąś strukturę powiedzmy,

typedef struct dane{
char* name;
uint16 ohm;
uint16 time_const;
uint32 WW_PWM;
}T_dane;


Potem tworzę tablicę T_dane dane[].
Tablice inicjalizuję oczywiście ręcznie, wpisując kolejne obiekty.
Tablica ma rozmiar nieokreślony, ponieważ chce do niej w sposób swobodny dodawać elementy.
Wyjaśniam że nie chodzi o dynamiczne tworzenie tablicy. Przy kompilacji ustalam że tablica ma na przykład 5 elementów. Przy innej kompilacji programu robię sobie tablicę 3-elementową.
W programie odpowiednia funkcja ma określić ile elementów ma tablica.
Jeżeli potem gdzieś w programie chcę określić ile elementów ma tablica dane[] to jak to zrobić.
Wiem że powinienem użyć sizeof() ale to mi wylicza rozmiar zajmowany przez w pamięci przez pojedynczą strukturę.
A ja chce wiedzieć ile elementów mam w tablicy, 2,3 a może 500.

_________________
auto gaz, serwis instalacji LPG, Instalacje LPG



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2015, o 13:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Zobacz sobie tutaj topic10373.html oraz tutaj topic4612.html#p54675 , Moze to Ci pomoze :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2015, o 16:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Można by zrobić makro preprocesora z ilością elementów i
w każdym miejscy gdzie będziesz potrzebował tej informacji użyjesz stałej (makra)
np.:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Powinno przynieść pożądany skutek :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2015, o 16:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Zaba napisał(a):
Powinno przynieść pożądany skutek

Moze sie myle ale kolega napisal ze chce znac ilosc elementow ktore podczas pracy programu moze dodawac/usuwac ....

Cytuj:
A ja chce wiedzieć ile elementów mam w tablicy, 2,3 a może 500.


... wiec wydaje mi sie ze to niestety nie odpowie na pytanie . SizeOf jesli stosowany do array (nie wiem jak to napisac po PL - zbioru)? zwraca nam ilosc bajtow zajetych przez ten array. Wiec majac to musimy podzielic go przez rozmiar pojedynczego elementu

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tylko tak jak w powiazanych. Jesli przekazemy tablice jako wskaznik do funkcji i tam sprobujemy uzyc tego - to to nie wyjdzie.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2015, o 22:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

@RafPe
z tego
Cytuj:
Wyjaśniam że nie chodzi o dynamiczne tworzenie tablicy.
Przy kompilacji ustalam że tablica ma na przykład 5 elementów. Przy innej kompilacji programu robię sobie tablicę 3-elementową.

wywnioskowałem co innego.
Ale może nie zrozumiałem co kolega autor ma na myśli



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2015, o 22:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Zaba napisał(a):
Ale może nie zrozumiałem co kolega autor ma na myśli


Ale dzieki nam autor ma teraz wiecej opcji do wykorzystania jako potencjalne rozwiazania :D

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lip 2015, o 07:22 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27462
Lokalizacja: Szczecin
Pomógł: 1045

Stosowanie dynamicznie alokowanych tablic w C to bardzo rzadka sprawa ;) można powiedzieć prawie nie używana ... Dlatego rozwiązanie kolegi Zaba jest dobre.

Za to uważam, że właśnie szczególnie przy stałej wielkości tablicach upieranie się na obliczanie w trakcie programu ich wielkości to coś zupełnie niepotrzebnego bo i tak zawsze znamy taką wielkość i nawet bez obliczania w preprocesorze wystarczy sobie zdefiniować stałą z wielkością tablicy i po zawodach. Szybciej, lepiej i przyjemniej. Co w efekcie pokazuje, że jak ktoś już ma ew ogromną jakąś strukturę i nie chce mu się "na piechotę" policzyć jej rozmiaru no to znowu - rozwiązanie kolegi Zaba jest przydatne ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lip 2015, o 11:47 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Dałbyś słówko wyjaśnienia. No dobra, spróbuję sam... :-)
Interesuje nas mianownik bo licznik jest oczywisty, a konkretnie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dla tablicy będzie zawsze równe zero bo nie może istnieć niecałkowity element tablicy. Łatwizna. ;-)
Dla wskaźnika zawsze równe jeden bo...no właśnie...
sizeof(ptr) to wielkość wskaźnika, dla avr równe 2. 0[x] to inaczej *(0+x), czyli pierwszy element tablicy, więc jeśli wskaźnik x jest typu int* to sizeof(0[x]) będzie równe 2? Nie pasuje :-(

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lip 2015, o 08:32 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

A jednak nie pasuje ;-). Czepiam się tego:
mokrowski napisał(a):
W przypadku przekazania "gołego wskaźnika" (nie tablicy), wywołuje asercję na etapie kompilacji z powodu (zamierzonego) dzielenia przez zero.

Jeśli tak to miało by działać to kompilacja Twojego przykładowego programu powinna się wywalić na linii 31., a tak nie jest. Wywala się na 35. (po odkomentowaniu) ale to oczywiste i nie o tym mówi powyższy cytat (fake_var nie jest wskaźnikiem).

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lip 2015, o 13:40 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

O dzięki, teraz to się klei. :-)

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lip 2015, o 19:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 kwi 2013
Posty: 38
Lokalizacja: Warszawa
Pomógł: 0

mirekk36 napisał(a):
Stosowanie dynamicznie alokowanych tablic w C to bardzo rzadka sprawa ;) można powiedzieć prawie nie używana ... Dlatego rozwiązanie kolegi Zaba jest dobre.

Za to uważam, że właśnie szczególnie przy stałej wielkości tablicach upieranie się na obliczanie w trakcie programu ich wielkości to coś zupełnie niepotrzebnego bo i tak zawsze znamy taką wielkość i nawet bez obliczania w preprocesorze wystarczy sobie zdefiniować stałą z wielkością tablicy i po zawodach. Szybciej, lepiej i przyjemniej. Co w efekcie pokazuje, że jak ktoś już ma ew ogromną jakąś strukturę i nie chce mu się "na piechotę" policzyć jej rozmiaru no to znowu - rozwiązanie kolegi Zaba jest przydatne ;)


Wyobraź sobie że wykorzystujesz rozmiar tablicy struktur w paru miejscach programu.
Z jakich względów przy kompilacji zmienisz często ręcznie rozmiar tablicy.
Jak zapomnisz uaktualnić rozmiar tablicy to w jakimś dziwnym miejscu program "wyłoży się" i możesz mieć kilka dłuuugich chwil zdziwienia i podniesionego ciśnienia. Wszystko jest w porządku a program nie działa, co jest grane.....

_________________
auto gaz, serwis instalacji LPG, Instalacje LPG



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lip 2015, o 20:35 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27462
Lokalizacja: Szczecin
Pomógł: 1045

afrikanerhart napisał(a):
Wyobraź sobie że wykorzystujesz rozmiar tablicy struktur w paru miejscach programu.

No wyobrażam sobie, i nadal nie widzę problemu.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO