Указатели в c [переменная вложенного указателя]? - PullRequest
1 голос
/ 10 февраля 2011

Следующая программа объявляет указатель, а затем снова новый указатель для хранения адреса предыдущей переменной указателя. Сколько можно использовать вложенную переменную указателя для хранения адреса памяти есть ли предел?

#include <stdio.h>
#include <conio.h>

void main()
{
    int x=2,y=5;

    int *ptr;
    int **sptr;
    int ***ssptr;

    ptr = &x; // address of x
    *ptr = 0; 
    sptr = &ptr;
    ssptr = & sptr;

printf(" address is ip = %u %u %u",ptr,sptr,ssptr);
    _getch();
}

Ответы [ 6 ]

1 голос
/ 10 февраля 2011

Нет ограничений. Указатель - это фрагмент памяти (обычно одно слово), содержимое которого является адресом. Указатель на указатель также является словом, содержимое которого является адресом, но так получилось, что содержимое на этом адресе является другим адресом. Нет ничего особенно особенного в указателе на указатель (на указатель на указатель ... и т. Д., ad nauseum ).

0 голосов
/ 11 февраля 2011

Нет ограничений.Вы даже можете сделать указатель, который указывает на себя, который бесконечно рекурсивен:

void *p = &p;
0 голосов
/ 10 февраля 2011

Единственный язык, который я могу найти, который предлагает ограничение, это:

5.2.4.1 Пределы перевода

1 Реализация должна быть в состоянии перевести и выполнить по крайней мере одну программу, которая содержит хотя бы один экземпляр каждого из следующих ограничений: 13)
...
- 12 указателей, массивов и функций объявления (в любых комбинациях), изменяющих арифметический, структурный, объединенный или неполный тип в объявлении
...
- 4095 символов в строке логического источника
...
0 голосов
/ 10 февраля 2011

Нет, нет предела, потому что все они всего лишь указатели на что-то, и то, на что они указывают, просто оказывается другим указателем. Вы пытаетесь сделать что-то практичное? Тодд.

0 голосов
/ 10 февраля 2011

Нет ограничений на сам язык. Назначение переменной-указателя - сохранить адрес. Можно сохранить указатель, который указывает на адрес, который указывает на адрес, ..., который указывает на адрес.

Однако, чем больше вы используете эти типы вложенных указателей, тем менее понятным будет ваш код.

0 голосов
/ 10 февраля 2011

Насколько я знаю, не должно быть никаких ограничений, кроме ограничений системной памяти (теоретически). Это будет зависеть от используемого компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...