Ĺadny brzuch
Witajcie
Otóż napisałem funkcję:
void funkcja(int* tab){ cout << sizeof(tab); }
albo
void funkcja(int tab[]){ cout << sizeof(tab); }
gdy wywołam jedną z tych funkcji
int tablica[10]; funkcja(tablica);
To na ekranie wyświetla się 4.
Moje pytanie brzmi: czy jest jakiś sposób aby z wnętrza funkcij wyświetlić rozmiar tablicy, czy też może jestem zmuszony użyć takich konstrukcii:
void funkcja(int* tab, int size){ cout << size << endl; }
lub
void funkcja(int tab[], int size){ cout << size << endl; }
i wtedy wywołać tę funkcję tak: int tablica[10]; funkcja(tablica, sizeof(tablica));
Zadałem to pytanie ponieważ zależy mi aby funkcja pobierała tylko jeden argument a nie dwa. Dodam że jest to kawałek funkcij i niepytajcie dlaczego tak chce to zrobić a nie inaczej.
Z góry dzięki.
Pzdr
Użytkownik c++ edytował ten post 23 październik 2005, 23:44
Specjalistą od C++ nie jestem ale wydaje mi się że nie ma takiej możliwości. Bo jakby była to wszyscy by z niej kożystali :). A powód na takie działanie twojej funkcji jest prosty. Funkcje w C++ zazwyczaj działają na kopii przekazanych zmiennych. Z tablicami jest inaczej. Do funkcji przekazywany jest wskaźnik do pierwszego elementu tablicy, żeby niekopiować kolejny raz tablicy ( funkcja działa na orginale tablicy ). Zatem sizeof() zwróci Ci wielkość zmiennej na którą pokazuje wskaźnik. Czyli pierwszego elementu tablicy typu int.
Użytkownik reVis edytował ten post 24 październik 2005, 05:53
Zatem sizeof() zwróci Ci wielkość zmiennej na którą pokazuje wskaźnik. Czyli pierwszego elementu tablicy typu int.
Prawie ;). sizeof(tab) zwroci wielkosc wskaznika a nie pierwszego el. w tablicy
A może zdefiniuj te tablice jako globalną, będziesz mógł się odnosić do niej w każdym miejscu i nie będzie problemu :D
A może zdefiniuj te tablice jako globalną, będziesz mógł się odnosić do niej w każdym miejscu i nie będzie problemu :D
Moje pytanie brzmi: czy jest jakiś sposób aby z wnętrza funkcij wyświetlić rozmiar tablicy, czy też może jestem zmuszony użyć takich konstrukcii:
(...)
Zadałem to pytanie ponieważ zależy mi aby funkcja pobierała tylko jeden argument a nie dwa. Dodam że jest to kawałek funkcij i niepytajcie dlaczego tak chce to zrobić a nie inaczej.
Z góry dzięki.
Pzdr
Jak masz to w klasie to wystarczy napisać funkcje co go odczyta. Po co sobie życie komplikować. Nie wiem co to za program i do czego ale ty pisząć go chyba panujesz nad tym co robisz :)
A w ogole to mozna uzyc std::vector-ka i wszystkie problemy z glowy ...
A jak ci tak maksymalnie na tym zależy i chcesz sobie dożucic sporo roboty to w pierwszym elemenci tablicy zapisuj jej rozmiar a w pozostałych już odpowednie wartości :)
A jak ci tak maksymalnie na tym zależy i chcesz sobie dożucic sporo roboty to w pierwszym elemenci tablicy zapisuj jej rozmiar a w pozostałych już odpowednie wartości :)
Ja zrobil bym to tak. Jesli chodzi o ilosc elementow tablicy to mozna po prostu
np:
tablica[]; // deklaracja tablicy
a w funkcji:
int liczbaElementow = ((int) (sizeof tablica / sizeof tablica[0]));
a jesli chcemy znac rozmiar tablicy to wystarczy pomnozyc ilosc elementow razy ile dana zmienna zajmuje czyli
int rozmiarTablicy =(int)( sizeof(int)*(sizeof tablica / sizeof tablica[0]));
Wydaje mi sie ze powinnno dzialac
Ja zrobil bym to tak. Jesli chodzi o ilosc elementow tablicy to mozna po prostu
np:
tablica[]; // deklaracja tablicy
a w funkcji:
int liczbaElementow = ((int) (sizeof tablica / sizeof tablica[0]));
a jesli chcemy znac rozmiar tablicy to wystarczy pomnozyc ilosc elementow razy ile dana zmienna zajmuje czyli
int rozmiarTablicy =(int)( sizeof(int)*(sizeof tablica / sizeof tablica[0]));
Wydaje mi sie ze powinnno dzialac
A gdzie tu widzisz kod pokazujacy funkcje w ktorej lokalnie jest tworzona tablica w stylu int a[] ? Bo ja nie widze. To jest przyklad jak mozna to rozwiazac. Zreszta co to za roznica. Tablica jest zawsze przekazywana przez wskaznik lub referencje nigdy przez wartosc wiec moze byc to i globalna tablica a w funkcji tworzone sa jedynie zmienne lokalne... :mellow:
EDIT: ludzie nie bojcie sie uzywam urokow biblioteki standardowej. klasa vector wlasnie po to zostala stworzona dostarcza wszyskiego... tak samo jak nie warto meczyc sie z char* costam; bo od tego sa stringi tak samo mi sie wydaje vector wygodniejszy w uzyciu
Użytkownik Zarius edytował ten post 25 październik 2005, 18:27
A gdzie tu widzisz kod pokazujacy funkcje w ktorej lokalnie jest tworzona tablica w stylu int a[] ? Bo ja nie widze. To jest przyklad jak mozna to rozwiazac. Zreszta co to za roznica. Tablica jest zawsze przekazywana przez wskaznik lub referencje nigdy przez wartosc wiec moze byc to i globalna tablica a w funkcji tworzone sa jedynie zmienne lokalne... :mellow:
Chyba sie nie zrozumielismy:
int tablica[]; // czy jakikolwiek inny typ
int funkcja(int* przekazanie);
int main()
{
cout << "rozmiar tablicy to:\t" << funkcja() << end;
}
int funkcja(int* przekazanie)
{
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0]));
int liczbaElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
return rozmiartablicy;
// Rob cos innego
}
Teraz sie podoba ?
Napisalem jak mozna uzyskac rozmiar tablicy i ilosc jej elementow a czy upakujesz to do funkcji do klasy czy to struktury czy do czegokolwiek nie robi roznicy...
Chyba sie nie zrozumielismy:
int tablica[]; // czy jakikolwiek inny typ
int funkcja(int* przekazanie);
int main()
{
cout << "rozmiar tablicy to:\t" << funkcja() << end;
}
int funkcja(int* przekazanie)
{
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0]));
int liczbaElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
return rozmiartablicy;
// Rob cos innego
}
Teraz sie podoba ?
Napisalem jak mozna uzyskac rozmiar tablicy i ilosc jej elementow a czy upakujesz to do funkcji do klasy czy to struktury czy do czegokolwiek nie robi roznicy...
Chyba sie nie zrozumielismy:
int tablica[]; // czy jakikolwiek inny typ
(...)
int funkcja(int* przekazanie)
{
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0]));
int liczbaElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
return rozmiartablicy;
// Rob cos innego
}
Teraz sie podoba ?
Nie bo glupoty piszesz ze ja piernicze.
1. Zle zadeklarowana tablica;
2. sizeof wymaga nawiasow !!
3. Rozmiar tablicy mnie rozwalil po prostu ...
Ok - masz i ucz sie :
int blablabla[109]; int rozmiar_tablicy = sizeof(blablabla); int n_elementow = sizeof(blablabla) / sizeof(blablabla[0]);
EDIT: I czy Ty nie widzisz jak pisalem o sizeof wskaznikow ?. Bo to co zrobiles to :
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0]));
==>
int rozmiartablicy = (int)( 4*(4 / 4));
==>
4
:)
Użytkownik st3tc edytował ten post 25 październik 2005, 18:50
1. Powiedzilaem ze tego nie sprawdzlaem
2. Nie wiem jak kto sobie ma zamiar to opakowac ale chodzi mi glownie o:
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0])); int liczbaElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
te linie.
Jesli przekazesz tablice do funkcji a one operowac beda w ten sposob na tej tablicy to oblicza ILOSC ELEMENTOW A CO ZA TYM IDZIE ROZMIAR
mozna napisac rowniez
int lElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
int lTablicy = (int)(sizeof(int) * lElementow);
Jak mozna latwo zauwayc kod pisalem w przegladarce a nie w kompilatorze i nie mam mozliwosci sprawdzenia czy kod sie skompiluje ale to byl przyklad a te dwie linie wyliczaja to co nalezy
Jesli przekazesz tablice do funkcji a one operowac beda w ten sposob na tej tablicy to oblicza ILOSC ELEMENTOW A CO ZA TYM IDZIE ROZMIAR Wczytaj sie uwaznie w edita z mojego poprzedniego poscika.
Pozdrawiam
st3tc
1. Powiedzilaem ze tego nie sprawdzlaem
2. Nie wiem jak kto sobie ma zamiar to opakowac ale chodzi mi glownie o:
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0])); int liczbaElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
te linie.
Jesli przekazesz tablice do funkcji a one operowac beda w ten sposob na tej tablicy to oblicza ILOSC ELEMENTOW A CO ZA TYM IDZIE ROZMIAR
mozna napisac rowniez
int lElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
int lTablicy = (int)(sizeof(int) * lElementow);
Jak mozna latwo zauwayc kod pisalem w przegladarce a nie w kompilatorze i nie mam mozliwosci sprawdzenia czy kod sie skompiluje ale to byl przyklad a te dwie linie wyliczaja to co nalezy
bo sama nazwa tablicy jest wskaźnikiem const na jej pierwszy element A skad Ci sie nagle wzial const ? ;p
omg... czy ja pokazywlaem program ?! Czlowieku ktos zapytal o rozmiar tablicy. Przypomnialy mi sie ze ja korzystalem z tego obliczenia ale rzeczywisice nie uwzglednilem ze poprostu dzielil bym 4 caly czas (wskaznik) dlatego potem na szybkiego napisalem kod o co mi chodzi.
Jesli chodzi o to w takim razie co za problem przekazac do funkcji wartosc tego bliczenia jako drugi parametr do funkcji. Troche inwencji.
mysle ze cos takiego jesli zostanie napisane w win main to zadziala:
int tablica[] = {1,2,3,4,5};
int ilosc elementow = ((int) (sizeof tablica / sizeof tablica [0]));
i do funkcji mozna przekazac dwa parametry i po problemie.
A ilosc pamieci jaka zajmuje mozna juz w samej funkcji bo moze to byc np tablica double float int itp... W tym wypadku bedzie to dzialac
Chyba ze i takie rozwiazanie nie odpowiada (dwa parametry) w takim wypadku nie mam pojecia... moze skorzystac z kontenerow ?!
edit: rotfl :P
edit2: ok tylko dziwne podejscie ze na jeden parametr :P Jesli chodzi o jeden to sie nie da a o dwa to zadziala to co wyzej jesli ktos chce to kod przetestowany tym razem :P
#include <iostream> using namespace std; int funkcja(int* przekazanie, int elementow); int main() { int tablica[] = {1, 2, 3, 4, 5, 6}; int elementow = ((int) (sizeof tablica / sizeof tablica[0])); cout << elementow; cout << "Rozmiar dla kazdego int'a = 4 przy 6 zmiennych:\t" << funkcja(tablica, elementow) << endl; } int funkcja(int* przekazanie, int elementow) { int rozmiar = ((sizeof(int) * (elementow))); return rozmiar; }
Użytkownik Zarius edytował ten post 25 październik 2005, 19:13
Zarius zrozum. Autor pytał sie jak obliczyć wielkość tablicy wewnątrz funkcji niedodając drugiego parametru przy jej wywołaniu. Dowiedział się, że się nie da i koniec. Twój sposób działa ok, ale nie wewnątrz funkcji :excl:
Użytkownik reVis edytował ten post 25 październik 2005, 19:11
A skad Ci sie nagle wzial const ? ;p
J.Liberty "C++ Dla Każdego" -> rozdział 13. strony nie pamiętam
:)
Użytkownik pekore edytował ten post 25 październik 2005, 19:58
Co nie zmienia faktu, że rozmiaru tablicy przekazanej w parametrze funkcji przez wskaźnik NIE DA się obliczyć, ponieważ wskaźnik wskazuje na pierwszy element, ale nie wiadomo, gdzie jest koniec w pamięci.
Jak napisał st3tc, rozwiązaniem jest std::vector przekazany przez & (referencja się to chyba nazywało :P )
edit2: ok tylko dziwne podejscie ze na jeden parametr :P Jesli chodzi o jeden to sie nie da a o dwa to zadziala to co wyzej jesli ktos chce to kod przetestowany tym razem :P
Jak mu zależy, to niech się bierze za std::vector
Jak mu zależy, to niech się bierze za std::vector
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Otóż napisałem funkcję:
void funkcja(int* tab){ cout << sizeof(tab); }
albo
void funkcja(int tab[]){ cout << sizeof(tab); }
gdy wywołam jedną z tych funkcji
int tablica[10]; funkcja(tablica);
To na ekranie wyświetla się 4.
Moje pytanie brzmi: czy jest jakiś sposób aby z wnętrza funkcij wyświetlić rozmiar tablicy, czy też może jestem zmuszony użyć takich konstrukcii:
void funkcja(int* tab, int size){ cout << size << endl; }
lub
void funkcja(int tab[], int size){ cout << size << endl; }
i wtedy wywołać tę funkcję tak: int tablica[10]; funkcja(tablica, sizeof(tablica));
Zadałem to pytanie ponieważ zależy mi aby funkcja pobierała tylko jeden argument a nie dwa. Dodam że jest to kawałek funkcij i niepytajcie dlaczego tak chce to zrobić a nie inaczej.
Z góry dzięki.
Pzdr
Użytkownik c++ edytował ten post 23 październik 2005, 23:44
Specjalistą od C++ nie jestem ale wydaje mi się że nie ma takiej możliwości. Bo jakby była to wszyscy by z niej kożystali :). A powód na takie działanie twojej funkcji jest prosty. Funkcje w C++ zazwyczaj działają na kopii przekazanych zmiennych. Z tablicami jest inaczej. Do funkcji przekazywany jest wskaźnik do pierwszego elementu tablicy, żeby niekopiować kolejny raz tablicy ( funkcja działa na orginale tablicy ). Zatem sizeof() zwróci Ci wielkość zmiennej na którą pokazuje wskaźnik. Czyli pierwszego elementu tablicy typu int.
Użytkownik reVis edytował ten post 24 październik 2005, 05:53
Zatem sizeof() zwróci Ci wielkość zmiennej na którą pokazuje wskaźnik. Czyli pierwszego elementu tablicy typu int.

Prawie ;). sizeof(tab) zwroci wielkosc wskaznika a nie pierwszego el. w tablicy

A może zdefiniuj te tablice jako globalną, będziesz mógł się odnosić do niej w każdym miejscu i nie będzie problemu :D
A może zdefiniuj te tablice jako globalną, będziesz mógł się odnosić do niej w każdym miejscu i nie będzie problemu :D

Moje pytanie brzmi: czy jest jakiś sposób aby z wnętrza funkcij wyświetlić rozmiar tablicy, czy też może jestem zmuszony użyć takich konstrukcii:
(...)
Zadałem to pytanie ponieważ zależy mi aby funkcja pobierała tylko jeden argument a nie dwa. Dodam że jest to kawałek funkcij i niepytajcie dlaczego tak chce to zrobić a nie inaczej.
Z góry dzięki.
Pzdr

Jak masz to w klasie to wystarczy napisać funkcje co go odczyta. Po co sobie życie komplikować. Nie wiem co to za program i do czego ale ty pisząć go chyba panujesz nad tym co robisz :)

A w ogole to mozna uzyc std::vector-ka i wszystkie problemy z glowy ...
A jak ci tak maksymalnie na tym zależy i chcesz sobie dożucic sporo roboty to w pierwszym elemenci tablicy zapisuj jej rozmiar a w pozostałych już odpowednie wartości :)
A jak ci tak maksymalnie na tym zależy i chcesz sobie dożucic sporo roboty to w pierwszym elemenci tablicy zapisuj jej rozmiar a w pozostałych już odpowednie wartości :)

Ja zrobil bym to tak. Jesli chodzi o ilosc elementow tablicy to mozna po prostu
np:
tablica[]; // deklaracja tablicy
a w funkcji:
int liczbaElementow = ((int) (sizeof tablica / sizeof tablica[0]));
a jesli chcemy znac rozmiar tablicy to wystarczy pomnozyc ilosc elementow razy ile dana zmienna zajmuje czyli
int rozmiarTablicy =(int)( sizeof(int)*(sizeof tablica / sizeof tablica[0]));
Wydaje mi sie ze powinnno dzialac
Ja zrobil bym to tak. Jesli chodzi o ilosc elementow tablicy to mozna po prostu
np:
tablica[]; // deklaracja tablicy
a w funkcji:
int liczbaElementow = ((int) (sizeof tablica / sizeof tablica[0]));
a jesli chcemy znac rozmiar tablicy to wystarczy pomnozyc ilosc elementow razy ile dana zmienna zajmuje czyli
int rozmiarTablicy =(int)( sizeof(int)*(sizeof tablica / sizeof tablica[0]));
Wydaje mi sie ze powinnno dzialac

A gdzie tu widzisz kod pokazujacy funkcje w ktorej lokalnie jest tworzona tablica w stylu int a[] ? Bo ja nie widze. To jest przyklad jak mozna to rozwiazac. Zreszta co to za roznica. Tablica jest zawsze przekazywana przez wskaznik lub referencje nigdy przez wartosc wiec moze byc to i globalna tablica a w funkcji tworzone sa jedynie zmienne lokalne... :mellow:
EDIT: ludzie nie bojcie sie uzywam urokow biblioteki standardowej. klasa vector wlasnie po to zostala stworzona dostarcza wszyskiego... tak samo jak nie warto meczyc sie z char* costam; bo od tego sa stringi tak samo mi sie wydaje vector wygodniejszy w uzyciu
Użytkownik Zarius edytował ten post 25 październik 2005, 18:27
A gdzie tu widzisz kod pokazujacy funkcje w ktorej lokalnie jest tworzona tablica w stylu int a[] ? Bo ja nie widze. To jest przyklad jak mozna to rozwiazac. Zreszta co to za roznica. Tablica jest zawsze przekazywana przez wskaznik lub referencje nigdy przez wartosc wiec moze byc to i globalna tablica a w funkcji tworzone sa jedynie zmienne lokalne... :mellow:

Chyba sie nie zrozumielismy:
int tablica[]; // czy jakikolwiek inny typ
int funkcja(int* przekazanie);
int main()
{
cout << "rozmiar tablicy to:\t" << funkcja() << end;
}
int funkcja(int* przekazanie)
{
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0]));
int liczbaElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
return rozmiartablicy;
// Rob cos innego
}
Teraz sie podoba ?
Napisalem jak mozna uzyskac rozmiar tablicy i ilosc jej elementow a czy upakujesz to do funkcji do klasy czy to struktury czy do czegokolwiek nie robi roznicy...
Chyba sie nie zrozumielismy:
int tablica[]; // czy jakikolwiek inny typ
int funkcja(int* przekazanie);
int main()
{
cout << "rozmiar tablicy to:\t" << funkcja() << end;
}
int funkcja(int* przekazanie)
{
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0]));
int liczbaElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
return rozmiartablicy;
// Rob cos innego
}
Teraz sie podoba ?
Napisalem jak mozna uzyskac rozmiar tablicy i ilosc jej elementow a czy upakujesz to do funkcji do klasy czy to struktury czy do czegokolwiek nie robi roznicy...

Chyba sie nie zrozumielismy:
int tablica[]; // czy jakikolwiek inny typ
(...)
int funkcja(int* przekazanie)
{
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0]));
int liczbaElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
return rozmiartablicy;
// Rob cos innego
}
Teraz sie podoba ?
Nie bo glupoty piszesz ze ja piernicze.
1. Zle zadeklarowana tablica;
2. sizeof wymaga nawiasow !!
3. Rozmiar tablicy mnie rozwalil po prostu ...
Ok - masz i ucz sie :
int blablabla[109]; int rozmiar_tablicy = sizeof(blablabla); int n_elementow = sizeof(blablabla) / sizeof(blablabla[0]);
EDIT: I czy Ty nie widzisz jak pisalem o sizeof wskaznikow ?. Bo to co zrobiles to :
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0]));
==>
int rozmiartablicy = (int)( 4*(4 / 4));
==>
4
:)
Użytkownik st3tc edytował ten post 25 październik 2005, 18:50
1. Powiedzilaem ze tego nie sprawdzlaem
2. Nie wiem jak kto sobie ma zamiar to opakowac ale chodzi mi glownie o:
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0])); int liczbaElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
te linie.
Jesli przekazesz tablice do funkcji a one operowac beda w ten sposob na tej tablicy to oblicza ILOSC ELEMENTOW A CO ZA TYM IDZIE ROZMIAR
mozna napisac rowniez
int lElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
int lTablicy = (int)(sizeof(int) * lElementow);
Jak mozna latwo zauwayc kod pisalem w przegladarce a nie w kompilatorze i nie mam mozliwosci sprawdzenia czy kod sie skompiluje ale to byl przyklad a te dwie linie wyliczaja to co nalezy
Jesli przekazesz tablice do funkcji a one operowac beda w ten sposob na tej tablicy to oblicza ILOSC ELEMENTOW A CO ZA TYM IDZIE ROZMIAR Wczytaj sie uwaznie w edita z mojego poprzedniego poscika.
Pozdrawiam
st3tc
1. Powiedzilaem ze tego nie sprawdzlaem
2. Nie wiem jak kto sobie ma zamiar to opakowac ale chodzi mi glownie o:
int rozmiartablicy = (int)( sizeof(int)*(sizeof przekazanie / sizeof przekazanie[0])); int liczbaElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
te linie.
Jesli przekazesz tablice do funkcji a one operowac beda w ten sposob na tej tablicy to oblicza ILOSC ELEMENTOW A CO ZA TYM IDZIE ROZMIAR
mozna napisac rowniez
int lElementow = ((int) (sizeof przekazanie / sizeof przekazanie[0]));
int lTablicy = (int)(sizeof(int) * lElementow);
Jak mozna latwo zauwayc kod pisalem w przegladarce a nie w kompilatorze i nie mam mozliwosci sprawdzenia czy kod sie skompiluje ale to byl przyklad a te dwie linie wyliczaja to co nalezy

bo sama nazwa tablicy jest wskaźnikiem const na jej pierwszy element A skad Ci sie nagle wzial const ? ;p
omg... czy ja pokazywlaem program ?! Czlowieku ktos zapytal o rozmiar tablicy. Przypomnialy mi sie ze ja korzystalem z tego obliczenia ale rzeczywisice nie uwzglednilem ze poprostu dzielil bym 4 caly czas (wskaznik) dlatego potem na szybkiego napisalem kod o co mi chodzi.
Jesli chodzi o to w takim razie co za problem przekazac do funkcji wartosc tego bliczenia jako drugi parametr do funkcji. Troche inwencji.
mysle ze cos takiego jesli zostanie napisane w win main to zadziala:
int tablica[] = {1,2,3,4,5};
int ilosc elementow = ((int) (sizeof tablica / sizeof tablica [0]));
i do funkcji mozna przekazac dwa parametry i po problemie.
A ilosc pamieci jaka zajmuje mozna juz w samej funkcji bo moze to byc np tablica double float int itp... W tym wypadku bedzie to dzialac
Chyba ze i takie rozwiazanie nie odpowiada (dwa parametry) w takim wypadku nie mam pojecia... moze skorzystac z kontenerow ?!
edit: rotfl :P
edit2: ok tylko dziwne podejscie ze na jeden parametr :P Jesli chodzi o jeden to sie nie da a o dwa to zadziala to co wyzej jesli ktos chce to kod przetestowany tym razem :P
#include <iostream> using namespace std; int funkcja(int* przekazanie, int elementow); int main() { int tablica[] = {1, 2, 3, 4, 5, 6}; int elementow = ((int) (sizeof tablica / sizeof tablica[0])); cout << elementow; cout << "Rozmiar dla kazdego int'a = 4 przy 6 zmiennych:\t" << funkcja(tablica, elementow) << endl; } int funkcja(int* przekazanie, int elementow) { int rozmiar = ((sizeof(int) * (elementow))); return rozmiar; }
Użytkownik Zarius edytował ten post 25 październik 2005, 19:13
Zarius zrozum. Autor pytał sie jak obliczyć wielkość tablicy wewnątrz funkcji niedodając drugiego parametru przy jej wywołaniu. Dowiedział się, że się nie da i koniec. Twój sposób działa ok, ale nie wewnątrz funkcji :excl:
Użytkownik reVis edytował ten post 25 październik 2005, 19:11
A skad Ci sie nagle wzial const ? ;p

J.Liberty "C++ Dla Każdego" -> rozdział 13. strony nie pamiętam

:)
Użytkownik pekore edytował ten post 25 październik 2005, 19:58
Co nie zmienia faktu, że rozmiaru tablicy przekazanej w parametrze funkcji przez wskaźnik NIE DA się obliczyć, ponieważ wskaźnik wskazuje na pierwszy element, ale nie wiadomo, gdzie jest koniec w pamięci.
Jak napisał st3tc, rozwiązaniem jest std::vector przekazany przez & (referencja się to chyba nazywało :P )
edit2: ok tylko dziwne podejscie ze na jeden parametr :P Jesli chodzi o jeden to sie nie da a o dwa to zadziala to co wyzej jesli ktos chce to kod przetestowany tym razem :P

Jak mu zależy, to niech się bierze za std::vector
Jak mu zależy, to niech się bierze za std::vector
