Tableau sont passés par valeur ou par référence?

Je sais pour sûr que

function(int *a); function(int a[]);

dans C sont les mêmes, la fonction(int a[]) sera traduit en fonction(int *a)

int *a = malloc(20);
int b[] = {1,2,3,4,5};

Ces deux ne sont pas les mêmes, le premier est un pointeur, le deuxième est un tableau. Qu'advient-il lorsque j'appelle la fonction(b)?(fonction(int *))
Je sais que b est sur la pile, alors comment est-il passé à cette fonction?

Deuxièmement, les chaînes:

char *c1 = "string";
char c2 [] = "string";

Dans ce cas, je ne sais pas où est c1, et je suppose que c2 est sur la pile.
Supposons que la fonction est maintenant: fonction(char *c), qui est la même que la fonction(char c[]), qu'advient-il lorsque j'appelle la fonction(c1), et la fonction(c2), les cordes vont être passés par référence ou de valeur?

Oui, j'ai fait tout ce que vous avez mentionné, mais maintenant je suis en train de voir C, jusqu'à l'assemblage des verres.
Ensuite, compilez avec gcc -Wall -fverbose-asm -S yourfile.c puis regardez dans yourfile.s

OriginalL'auteur AR89 | 2012-11-19