2010-07-04 6 views
0

Possible en double:
Sizeof an array in the C programming language?taille du tableau int change

Pourquoi la taille de mon tableau int changer lorsqu'il est passé dans une fonction?

J'ai dans ma principale:

int numbers[1]; 
numbers[0] = 1; 
printf("numbers size %i", sizeof(numbers)); 
printSize(numbers); 
return 0; 

et c'est la méthode printSize

void printSize(int numbers[]){ 
printf("numbers size %i", sizeof(numbers));} 

Vous pouvez voir que je ne fais pas autre chose au tableau de nombres, mais les changements de taille quand il arrive à la méthode printSize ...? Si j'utilise la valeur de * numéros, il imprime la bonne taille ...?

+2

De nombreux doublons sur déjà, par exemple [Taille d'un tableau dans le langage de programmation C?] (Http://stackoverflow.com/questions/1975128/sizeof-an-array-in-the-c-programming-language) –

Répondre

8

Tout argument de tableau d'une fonction se décompose en un pointeur vers le premier élément du tableau. Donc, en réalité, votre fonction void printSize(int[]) a effectivement la signature void printSize(int*). En plein, il est équivalent à:

void printSize(int * numbers) 
{ 
    printf("numbers size %i", sizeof(numbers)); 
} 

La rédaction de cette façon nous espérons qu'il fait un peu plus clair que vous êtes à la recherche à la taille d'un pointeur, et non le tableau original.

Comme d'habitude, je vous recommande the C book's explication de cette :)

1

Eh bien, vous obtenez juste la taille du pointeur vers un int. Les tableaux ne sont qu'une syntaxe sophistiquée pour les pointeurs et les décalages.

+5

Un tableau n'est pas un pointeur. –

+0

Nous avons besoin d'un équivalent "ne pas analyser HTML avec regex" pour cette assertion. – detly

+0

@Neil Butterworth: "tableaux" ne sont pas des pointeurs, mais il est vrai que la "syntaxe de tableau" dans C est juste syntaxique sugare pour '* (ptr + index)' !! -1 si je pouvais au commentaire – ShinTakezou

Questions connexes