tab[10], sizeof(tab), sizeof(tab) w funkcji

0

Witam,
Potrzebuje wyjaśnienia, dlaczego

#include<iostream>
#include<stdlib.h>
using namespace std;
void ile(int tab[]);
int main()
{
int tab1[10];
<font color="green">// dlaczego to zadziała jak należy??????</span>
int w=sizeof(tab1)/sizeof(int);
cout<<w<<endl;

<font color="blue">//bo dlaczego to nie - to wiem - rozmiar adresu pierwszego elementu</span>
ile(tab);

system("pause");
return 0;
}
void ile(int tab[])
{

int w=sizeof(tab)/sizeof(int);
cout<<w;
}

Z góry dzięki

0
int tab1[10];
// dlaczego to zadziała jak należy??????
int w=sizeof(tab1)/sizeof(int);

Dlaczego to działa?
sizeof() jest funkcją czasu kompilacji. Czyli już kompilator zamienia sizeof(cos_tam) na rozmiar w bajtach podanego cos_tam`a. W tym wypadku (statyczna tablica, której rozmiar jest znany) kompilator nie ma problemu z określeniem ile bajtów ona zajmie, czyli tutaj zwróci rozmiar tablicy w bajtach. Żeby ten rozmiar w bajtach zamienić na ilość elementów tablicy wystarczy podzielić go przez rozmiar jednego obiektu.
czyli jeśli sizeof(int) == 4, to sizeof(tab1) = 4*10 = 40;
I po podzieleniu 40/4 = 10; i koło się zamyka :P

PS> Coś mnie ostatnio nosi na długie posty o niczym – szkoła się zaś zaczęła, to i ja się rozkręcam;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1