j'ai appris par this question que incrémenter un pointeur NULL ou incrémenter après la fin d'un tableau est un comportement bien défini:Est-ce que comparer à un pointeur un élément après la fin d'un tableau bien défini?
int* pointer = 0;
pointer++;
int a[3];
int* pointer2 = &a[0];
pointer2 += 4;
Mais si le pointeur pointant vers un endroit non valide est utilisé uniquement à titre de comparaison et la mémoire à son emplacement n'est jamais accessible?
Exemple:
void exampleFunction(int arrayLen, char** strArray)
{
for(char** str = strArray; str < strArray + arrayLen; str++) //or even str < &strArray[arrayLen]
{
//here *str is always a pointer to the first char of my string
}
}
Ici, je compare mon pointeur à un pointeur un élément après la fin du tableau. Est-ce un comportement bien défini?
Quand l'expression '* argv + argc' aurait-elle un sens? La longueur de 'argv [0]' n'est pas liée à 'argc'. Si vous voulez dire 'argv + argc', c'est bien AIUI parce que les pointeurs" un élément après la fin du tableau "sont bien définis et peuvent être comparés à d'autres pointeurs dans le même tableau. (Ou 'argv + argc + 1' car, comme chux mentionné,' argv' se termine par 'NULL'.) – Ryan
@chux Bon à savoir! Je dois juste utiliser '<=' alors. Mais la question initiale ne devrait pas prendre mon erreur en considération. Mise à jour avec un meilleur exemple – Winter
Votre deuxième code est OK car 'str' est toujours un pointeur valide. Cette dernière valeur n'est cependant pas dé-référencée. – chux