Dans le main, v "est" en fait un int[10], le int[] = {} est une facilité d'écriture.
Mais un int[10] n'est pas une l-value, ni passable directement en paramètre.
Par contre, int v[10] -> int v[] == int *v est possible
(il suffit de prendre l'adresse du premier élément) et utilisé pour le passage de paramètres.
L'exemple suivant affiche "size is obviously : 20\nnot so obviously : 4 ".
namespace nSizeof
{
void func1(int faTruc[5])
{
// the [5] ne sert à rien
cout << "not so obviously : " << sizeof(*faTruc) << endl;
}
# Passage
Posté par Sisyphe Plâtrier . En réponse au message taille d'un tableau avec sizeof. Évalué à 3.
Mais un int[10] n'est pas une l-value, ni passable directement en paramètre.
Par contre, int v[10] -> int v[] == int *v est possible
(il suffit de prendre l'adresse du premier élément) et utilisé pour le passage de paramètres.
L'exemple suivant affiche "size is obviously : 20\nnot so obviously : 4 ".
namespace nSizeof
{
void func1(int faTruc[5])
{
// the [5] ne sert à rien
cout << "not so obviously : " << sizeof(*faTruc) << endl;
}
void func5(int (*faTruc)[5])
{
cout << "size is obviously : " << sizeof(*faTruc) << endl;
}
bool doTest()
{
int lDummy = 5;
int laTab5[] = {1,2,3,4,5};
func5(&laTab5);
func1(laTab5);
//int laTab5_2[5];
//laTab5_2 = laTab5; // not a l-value
//laTab5_2 = (int*)laTab5; // no conversion to array types
//laTab5 = &lDummy; // idem
return true;
}
};
int main()
{
nSizeof::doTest();
return 0;
}
indent :(