Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
1

Как промежуточный указатель на структуру (node* p) переходит по адресам

20.03.2016, 22:49. Просмотров 1072. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <conio.h>
#include <iomanip>
#include "MyLib.h"
 
struct node {
    int info;
    struct node* next; // указатель на эту же структуру
};
 
int main() {
    MyLanguage("Russian");
    MyColor(10);
    struct node* head = NULL;
    struct node* p = NULL;
    struct node* tail = NULL;
 
    int N = 10;
    int cnt = 1;
    if (head == NULL) {
        head = new node;
        head->info = cnt++;
        head->next = NULL;
        tail = head;
    }
    for (int i = 2; i <= N; ++i) {
        p = new node;
        p->info = cnt++;
        p->next = NULL;
        tail->next = p;
        tail = p;
    }
    p = head;
    for (int i = 1; i <= N; ++i) {
        std::cout << std::setw(20) << p->info << ' ';
        p = p->next;
    }
    _getch();
    return 0;
}
Добавлено через 4 минуты
Цитата Сообщение от MuslimPalit Посмотреть сообщение
for (int i = 1; i <= N; ++i) {
* * * * std::cout << std::setw(20) << p->info << ' ';
* * * * p = p->next;
* * }
как здесь происходит разыменование 10- ти адресов памяти, если итерация не связана ни с указателем на структуру, ни с полями структур, или я чего то не знаю. Как провели инициализацию значений по адресам понятно.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2016, 22:49
Ответы с готовыми решениями:

IAR размещает структуру по непонятным адресам вне ОЗУ
Переношу пример DHCP для WIZNET W5100, где используется структура для формирования DHCP запроса....

Как инициализировать указатель на структуру?
Помогите розобратся, если можно с краткими примерами... __ как инициализировать указатель на...

Как передать указатель на структуру?
Добрый день, господа. Прошу помощи сообщества по следующему вопросу. Срочно нужна помощь....

Указатель на структуру, и в структуре указатель на структуру
Добрый день. Structure xDocuments lol.s EndStructure Structure xWord ...

Указатель на структуру, как параметр функции
Господа программисты! Прошу вашей помощи! Помогите передать функции в качестве аргумента указатель...

6
Default_070
23 / 23 / 26
Регистрация: 01.10.2015
Сообщений: 175
Завершенные тесты: 1
20.03.2016, 23:01 2
Не совсем понимаю о чем ты, но если тебя напрягает это
C++
1
2
std::cout << std::setw(20) << p->info << ' ';
p = p->next;
,то p - это указатель на область памяти выделенную под node. Т.к. p указатель, то разыменовывается он так ->, затем происходит обращение к полю info на которое указывает p и выводится его значение. Во 2 строке p присваивается значение p->next, то есть указатель на следующую структуру.
0
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
20.03.2016, 23:04  [ТС] 3
Default_070, то что ты говоришь понятно, вот последняя строка, как? - это осуществляется, в памяти,
Цитата Сообщение от Default_070 Посмотреть сообщение
Во 2 строке p присваивается значение p->next, то есть указателем на следующую стркутуру.
0
Default_070
23 / 23 / 26
Регистрация: 01.10.2015
Сообщений: 175
Завершенные тесты: 1
20.03.2016, 23:07 4
next это поле вида *node как я понимаю. p->next - это обращение к этому полю. Т.к next(соответственно и p->next) это указатель на область памяти под node, то p присваивается значение последующего элемента(p->next). К примеру это как связный список и p это текущий элемент, а p->next последующий.
0
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
20.03.2016, 23:21  [ТС] 5
Default_070, не так, то словом понимаю, да и вижу как память меняется. Но и все же не понятно, почему он последующий, как он понимает. Могу предположить что структура node выделяет память в 10 адресов, и каждый адрес запоминает по 1му целочисленному значению, и при инициализации каждого поля структуры в next пишу нуль, и выделяю ему память по адресу, и так мы заполняем получается 20 адресов, где 10 - info и 10 - next, но как по этим адресам переходит абсолютно не могу понять.
0
Default_070
23 / 23 / 26
Регистрация: 01.10.2015
Сообщений: 175
Завершенные тесты: 1
20.03.2016, 23:35 6
Лучший ответ Сообщение было отмечено MuslimPalit как решение

Решение

Может я не понятно объясняю, но попробую еще раз.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct Node
{
    Node *next;
    int value;
};
 
int main()
{
    Node *first = 0, *last = 0;
    for(int i = 0; i < 2; i++)
    {
    Node *temp = new Node; // выделение памяти
    temp->next = 0; // указание что поле next ни на что не указывает
    if(first) // если first не равен 0
    {
        last->next = temp; // следующий элемент last (last->next) указывает на область памяти занимаемую temp
        last = temp;  // меняем адрес конца
    } else {
        first = last = temp; // first и last присваивается указатель temp
    }
    }
}
1
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
21.03.2016, 00:05  [ТС] 7
Цитата Сообщение от MuslimPalit Посмотреть сообщение
tail->next = p;
тут и происходит, типа итерации, просто не понятно, почему при разыменовании он переходит на следующий p = p->next ладно оставлю пока
0
21.03.2016, 00:05
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2016, 00:05

Как передать указатель на структуру в функцию
Подскажите как передать указатель *arr на структуру в функцию2, чтобы в ней использовать уже...

Ввод данных в структуру через указатель на структуру
#include &quot;stdafx.h&quot; #include &quot;ctime&quot; #include &quot;iostream&quot; #pragma warning(disable : 4996) ...

Как функция возвращает указатель на структуру в массив указателей
Друзья, следующий вопрос, у меня есть функция, которая: создает указатель на структуру-&gt; выделяет...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru