Форум программистов, компьютерный форум CyberForum.ru

Структуры, содержащие указатели на самих себя - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 05:16     Структуры, содержащие указатели на самих себя #1
Как вообще возможно существование структур, содержащих указатели на самих себя?
C++
1
2
3
4
5
struct mystruct{
   int a;
   char ch;
   mystruct* sptr; // Указатель на объекты типа mystruct
};
Например, если нам нужно вычислить объем, занимаемый mystruct в памяти, получается рекурсия!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.01.2012, 05:20     Структуры, содержащие указатели на самих себя #2
в случае с указателями как раз "рекурсии" не получается. размер указателя на любой тип всегда известен (32 бита для 32битных систем, 64 для 64 битных). Для этого даже определения типа не обязательно, достаточно объявления.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
09.01.2012, 05:27     Структуры, содержащие указатели на самих себя #3
Цитата Сообщение от Tamoren Посмотреть сообщение
Например, если нам нужно вычислить объем, занимаемый mystruct в памяти, получается рекурсия!
С чего бы вдруг? Указатель - фактически беззнаковое целое длинной в 4 байта (32-битные системы) или 8 байт (64-битные). Доделать пример, скомпилировать и посмотреть - не?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
struct mystruct{
   int a;
   char ch;
   struct mystruct* sptr; // Указатель на объекты типа mystruct
};
 
int main(void){
    printf("%d\n", sizeof(struct mystruct));
    
    return 0;
}
Код
~/cpp/other $ gcc -o sizeofstruct sizeofstruct.c 
~/cpp/other $ ./sizeofstruct 
12
А вот так
C
1
2
3
4
5
struct mystruct{
   int a;
   char ch;
   struct mystruct s;
};
действительно нельзя делать...
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 05:42  [ТС]     Структуры, содержащие указатели на самих себя #4
Ладно, с адресом плохой пример получился. Я хотел узнать как они будут в памяти расположены.
А если к примеру объявить struct mystruct obj; как будет осуществляться доступ ко всем элементам (включая те, что расположены по указателю)? И зачем вообще нужны ТАКИЕ указатели?
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.01.2012, 05:47     Структуры, содержащие указатели на самих себя #5
похоже вы осваиваете теорию без практики. для осознания необходимости таких указателей, попробуйте реализовать двусвязный список в классическом варианте. или хотябы посмотрите как это делается.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
09.01.2012, 05:48     Структуры, содержащие указатели на самих себя #6
Цитата Сообщение от Tamoren Посмотреть сообщение
И зачем вообще нужны ТАКИЕ указатели?
Связанные списки делать... пример
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2012, 06:00     Структуры, содержащие указатели на самих себя
Еще ссылки по теме:

C++ Указатели на структуры
C++ Указатели и структуры
C++ список (в программе обнуляются указатели на структуры)
C++ Структуры и указатели на структуры
Структуры и указатели C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
09.01.2012, 06:00  [ТС]     Структуры, содержащие указатели на самих себя #7
Цитата Сообщение от DU Посмотреть сообщение
похоже вы осваиваете теорию без практики
Так в теории было только про то, что они существуют и отсылка к связаным спискам. Открыл в инете первую попавшуюся программу - ничего не понял. Решил спросить...
Ладно, буду искать инфу по
Цитата Сообщение от DU Посмотреть сообщение
двусвязному списоку в классическом варианте
Yandex
Объявления
09.01.2012, 06:00     Структуры, содержащие указатели на самих себя
Ответ Создать тему
Опции темы

Текущее время: 08:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru