Я просматривал webpage, у которого было какое-то c FAQ, я нашел это заявление.Арифметика указателя в границах c и массива
Аналогично, если имеет 10 элементов и ф пункты к [3], вы не можете вычислить или доступа IP + 10 или IP - 5. (Существует один особый случай: вы может, в этом случая, вычислительный, но не доступ, указателя на несуществующий элемент сразу за конец массива, который в данном случае является & а [10].
Я был смущен по заявлению
вы не можете вычислить ф + 10
Я могу понять доступ к элементу вне границ не определен, но вычисления !!!.
Я написал следующий фрагмент кода, который вычисляющий (дайте мне знать, если это то, что веб-сайт означает вычислений) указатель недоступный.
#include <stdio.h>
int main()
{
int a[10], i;
int *p;
for (i = 0; i<10; i++)
a[i] = i;
p = &a[3];
printf("p = %p and p+10 = %p\n", p, p+10);
return 0;
}
$ ./a.out
p = 0xbfa53bbc and p+10 = 0xbfa53be4
Мы можем видеть, что p + 10 указывает на 10 элементов (40 байт) мимо p. Так что же означает утверждение, сделанное на веб-странице. Я что-то неправильно интерпретировал.
Даже в K & R (A.7.7) производится это утверждение:
Результат оператора + является сумма операндов. Указатель на объект в массиве и значение любого интегрального типа . ... Сумма является указателем того же типа, что и , и указывает на другой объект в том же массиве, соответственно смещенный от исходного объект. Таким образом, если P является указателем на объект в массиве, выражение P + 1 является указателем на следующий объект в массиве . Если указатель суммы указывает за пределы массива, , за исключением первого места за пределами верхнего предела, результат не определен.
Что значит быть «неопределенным». Означает ли это, что сумма будет неопределенной или это будет означать только тогда, когда мы разыграем ее, поведение не определено. Является ли операция неопределенной, даже если мы ее не разыскиваем и просто вычисляем указатель на элемент за пределами границ.
Это означает, что контент в этом конкретном месте не определен (случайный). – bioffe
undefined означает, что получение того, что вы ожидаете, так же плохо, как получение денег на вашем банковском счете, переведенном на мой банковский счет. Продолжайте кодирование неопределенных конструкций ... когда-нибудь произойдет неожиданное ... и я возьму отпуск своей мечты :) – pmg