La mission:
void *ptr = (char *)0x01;
Est définie par l'implémentation de comportement , car il est la conversion d'un entier à un pointeur. Ceci est détaillé dans la section 6.3.2.3 de la norme C concernant les Pointeurs:
5 Un entier peut être converti en un pointeur de type. Sauf comme indiqué précédemment, le résultat est la mise en œuvre définies,
pourrait ne pas être correctement aligné, pourrait pas à une entité
du type référencé, et peut-être un piège de la représentation.
Comme pour la suite de l'arithmétique des pointeurs:
ptr = (char *)ptr + 1;
Cela dépend d'un certain nombre de choses.
Tout d'abord, la valeur courante de ptr
peut être un piège de la représentation comme par 6.3.2.3 ci-dessus. Si elle l'est, le comportement est indéfini.
Vient ensuite la question de savoir si l' 0x1
de points à un objet valide. L'ajout d'un pointeur et un entier qui n'est valide que si le pointeur de l'opérande et le résultat de point d'éléments d'un tableau d'objet (un objet unique compte comme un tableau de taille 1), ou d'un élément du passé de l'objet array. Ceci est détaillé dans la section 6.5.6:
7 Pour l'application de ces opérateurs, un pointeur vers un objet qui n'est pas un élément d'un tableau se comporte de la même comme un
pointeur vers le premier élément d'un tableau de longueur avec le type
de l'objet comme type d'élément
8 Lorsqu'une expression de type entier est ajoutée ou déduite à partir d'un pointeur, le résultat est du type du pointeur
l'opérande. Si le pointeur de l'opérande points à un élément d'un tableau
objet, et le tableau est assez grand, le résultat des points à un élément
décalage de l'élément d'origine, tels que la différence de la
les indices de la résultante et du tableau d'origine des éléments est égale à la
expression entière. En d'autres termes, si l'expression de P points à l'
i-ième élément d'un tableau d'objet, les expressions (P)+N (de manière équivalente, N+(P) ) et (P)-N (où N est la valeur de n ) le point d',
respectivement, le i+n-th et th éléments de l'objet tableau, à condition qu'ils existent. En outre, si l'expression de P points pour le dernier élément d'un
objet de tableau, l'expression (P)+1 points l'un après le dernier élément de
l'objet array, et si l'expression de Q points devant le
dernier élément d'un tableau d'objet, l'expression (Q)-1 points à
le dernier élément de l'objet array. Si le pointeur de la
l'opérande et le résultat de point d'éléments d'un même tableau
objet, ou un passé le dernier élément de l'objet tableau, le
l'évaluation ne doit pas produire un dépassement de capacité; sinon, le comportement est
undefined. Si le résultat des points l'un après le dernier élément de la
objet array, il ne doit pas être utilisé comme opérande de unaire
* l'opérateur qui est évaluée.
Hébergé sur un de mise en œuvre de la valeur 0x1
presque certainement ne pas pointer vers un objet valide, auquel cas l'addition est pas défini. Un intégré à la mise en œuvre pourrait toutefois en charge la définition des pointeurs à des valeurs spécifiques, et si oui, ce pourrait être le cas que 0x1
n'en fait point d'un objet valide. Si oui, le problème est bien défini, sinon il n'est pas défini.