Étant donné un pointeur et un tableau, la définition d'un égal à un autre échoue dans un cas et fonctionne dans un autre.Quand pouvez-vous utiliser le nom d'un tableau de caractères pour créer une valeur L valide?
char *c_ptr = "I'm a char pointer";
char c_arry[] = "I'm a char array";
c_ptr = c_arry; //This line works.
c_arry = c_ptr; //This line fails.
Lorsque la ligne ci-dessus échoue, il génère cet avertissement: "erreur: types incompatibles lors de l'affectation de type". Cette erreur semble malhonnête, et franchement, un peu salope, étant donné que juste une ligne avant, elle a affirmé qu'elle était mon type.
Essayer de comprendre cette question, je Relisez K & le chapitre de R sur les pointeurs et les tableaux et remarquées à la page 102 de leur affirmation selon laquelle « le nom du tableau est l'adresse de l'élément zeroth ». Si K & R est exacte, la substitution en & c_arry [0] devrait générer la même erreur, non? Mais cette ligne:
&c_arry[0] = c_ptr;
me donne une nouvelle erreur: « lvalue nécessaire comme opérande gauche d'affectation ». Pourquoi cette valeur dite identique génère-t-elle une erreur différente? Lorsque GCC et K & R se contredisent, c'est alors que je me tourne vers les experts sur stackoverflow. En lisant un peu les valeurs l, j'en suis arrivé à la conclusion qu'il s'agit d'une question de valeur L et de valeur R, et que c_arry ne peut être qu'une valeur L - c'est-à-dire qu'une valeur assignée valeur - en deux, et seulement deux situations:
- initialisation de chaîne (c.-à-
char c_arry[] = "I'm a char array";
) - et l'affectation de caractères (c.-à-
c_arry[0] = 'A';
)
est ma conclusion précise? S'agit-il des seulement de deux façons que c_arry
peut jamais être attribué?
Ou, en d'autres termes, y a-t-il jamais un X, pour l'une des lignes de code suivantes, qui soit toujours valide?
c_arry = X;
&c_arry = X;
&c_arry[0] = X;
*c_arry = X;
*c_arry[0] = X;
duplication possible de [Affectation d'un tableau char en C] (http://stackoverflow.com/questions/12160233/assigning-char-array-a-value-in-c) –