2013-01-01 1 views
0

Lorsque vous affectez un littéral de chaîne tel que «ABC» à char a [] ex.Transmission de littéraux de chaîne aux fonctions C

char a[] = "ABC"; 

il a pour effet de faire

char a[4] = {'A','B','C','0'}; 

ne la même chose s'applique lorsque vous passez à un paramètre de fonction

ex.

int f(char a[]); 

contre

int f(char *a); 
+0

............. Pas –

+0

'" ABC "' est un 'char [4]' pas un 'char [3]' – ouah

Répondre

5

ne la même chose appliquer lorsque vous passez à un paramètre de fonction

Non; en général, en C, vous ne pouvez pas passer des tableaux directement en valeur; tous les paramètres de tableau à une fonction est en fait interprété par le compilateur comme paramètre de pointeur, à savoir lorsque vous écrivez

int f(char a[]); 

le compilateur voit

int f(char *a); 

(le même, même si vous spécifiez les dimensions de la tableau)


Par ailleurs,

il a pour effet de faire

char a[3] = {'A','B','C"}; 

En fait, il a pour effet de faire:

char a[4] = {'A','B','C', 0}; 
2

Non, parce que ces deux déclarations de fonctions sont identiques. Les deux déclarent une fonction qui prend un pointeur sur char, et dans les deux cas, l'argument est initialisé avec un pointeur sur le premier élément de la chaîne littérale.

+0

Vous voulez dire de la chaîne, pas de la chaîne littérale. – ouah

Questions connexes