Ограниченные указатели - PullRequest
       35

Ограниченные указатели

3 голосов
/ 27 сентября 2010

У меня вопрос по поводу ограниченных назначений указателей.Смотрите комментарии в коде для конкретных вопросов.В общем, мне просто интересно, что законно с ограничением (я прочитал стандарт, но все еще есть вопросы: - (

int* Q = malloc(sizeof(int)*100);

{
    int* restrict R = Q;

    for(int j = 0; j < rand()%50; j++)
    {
        R[j] = rand();
    }

    Q = R; // The standard says assigning restricted child pointers to their parent is illegal.
           // If Q was a restricted pointer, is it correct to assume that this would be ILLEGAL?
           //
           // Since Q is unrestricted, is this a legal assignment?
           //
           // I guess I'm just wondering: 
           // What's the appropriate way to carry the value of R out of the block so
           // the code can continue where the above loop left off? 
}

{
    int* S = Q;   // unrestricted child pointers, continuing where R left off above
    int* T = Q+1; // S and T alias with these assignments

    for(int j = 0; j < 50; j++)
    {
        S[j] = T[j];
    }
}

Спасибо за помощь!

1 Ответ

1 голос
/ 27 сентября 2010

Поскольку изменяемый объект (массив, выделенный в первой строке) не изменяется с помощью выражения lvalue, за исключением использования ограниченного указателя, R в том блоке, где объявлено R, я думаю, что код в пример хорошо определен.

Если бы Q был ограниченным указателем, пример был бы неопределенным.

...