Dans le code suivant:
void main()
{
char a[]={1,5,3,4,5,6};
printf("%d\n",*(a++)); //line gives error: wrong type argument to increment
printf("%d\n",*(a+1));
}
3 Réponses :
ici, vous attribuez à l'objet tableau une nouvelle valeur qui n'est pas autorisée dans c. p> A code> est un objet de tableau et non un pointeur afin que vous ne puissiez pas utiliser l'opération a ++ code>
pour un objet de tableau. Parce que cela équivaut à: A + 1 Code> Renvoie un pointeur sur l'élément 1 de votre tableau code> A code> et c'est autorisé p> p>
'A' se comporte comme un pointeur em> const.
'A' ne peut pas changer sa valeur ou l'adresse indiquée. En effet, le compilateur a affecté statiquement la mémoire de taille de la matrice et vous modifiez l'adresse qu'il fait référence à. Vous pouvez le faire comme suit à la place p> void main()
{
char a[]={1,5,3,4,5,6};
char *ch;
ch=a;
printf("%d\n",*(ch++)); //this lines gives error no more
printf("%d\n",*(ch+1));
}
@ H2co3 J'ai dit "supposer" A code> pour être un pointeur de const. Je n'ai pas appelé cela un cœuteur.
A code> est la référence de tableau et stocke l'adresse du premier membre de la matrice. Je peux "supposer" en toute sécurité pour être un pointeur de const
Non, tu ne peux pas. En outre, un tableau n'est pas un pointeur. C'est un tableau. Ce n'est pas parce que c'est un pointeur que vous ne pouvez pas vous assigner. C'est parce qu'il est interdit d'attribuer à un tableau. Ce n'est pas obligé d'être const. Ce n'est tout simplement pas un lvalue modifiable.
ok malheureusement mauvaises pratiques de codage: Cependant, répondons d'abord à votre problème: ne peut pas être utilisé car a est une référence implicite à la matrice; p> Vous pouvez le faire: p> et éteint que vous allez ... p> aussi * (A ++) < / code> n'est pas le même que * (A + 1) code> car ++ code> tente de modifier OPERAND, tandis que + code> ajout simplement une à constante < code> une valeur code>. p> p>
Aussi a ++ code> est évalué à l'ancienne valeur de A code> et la valeur stockée de A code> est incrémentée (postinCrèt)
Je ne suis pas bon en C, mais vous ne pouvez peut-être pas double-incrémenter (c'est-à-dire.
++ code> opérateur) des tableaux.Complètement hors topique mais
void principal () code> == mauvais! Lorsque vous pensezvoid principal () code>, image une personne qui te frappe avec un bâton.Int Main () Code>, toujours!