Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/63: Рейтинг темы: голосов - 63, средняя оценка - 4.71
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767

Указатели на структуры

06.11.2010, 18:20. Показов 13049. Ответов 104
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
type  celltype = record 
elетеt: integer; 
next: ^celltype 
end; 
DICTIONARY = array[0..B-1]  of  ^celltype;
какой аналог этой записи будет на си?
C++
1
2
3
4
5
6
7
typedef struct spis
{
    char *s;
    spis *next;
};
 
typedef struct spis *dict[maxn];
такой?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.11.2010, 18:20
Ответы с готовыми решениями:

Указатели на структуры
Подскажите в чем ошибка...Дело в том когда я в вожу в каждое поле по 1 значению все нормально выводит,но если при в вводе в поле я пишу два...

Указатели и структуры
Здравствуйте. Подскажите, пожалуйста, почему не меня среда ругается. error C2440: =: невозможно преобразовать "Book *" в...

Указатели и структуры
Здравия желаю. Подскажите пожалуйста каким образом осуществляется доступ к полю структуры, если оно является указателем?

104
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.11.2010, 02:31
Студворк — интернет-сервис помощи студентам
C++
1
2
        char ret[8]="no elem";
        char ret1[15]="elemet deleted";
вот это вот, это что вообще, это надо удалить
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 02:35  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
вот это вот, это что вообще, это надо удалить
я хотел таким образом завершать процедуру.что бы знать удалился или нет элемент

C++
1
2
3
4
5
6
if (k[res]==0)
        {
        k[res]=new spis;
        k[res]->s=x;
        k[res]->next=0;
        }
для нулевого узла т.е. если его нет это добавить?

Добавлено через 57 секунд

кстати для 3-х буквенного слова прога не вылетает
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.11.2010, 02:40
C++
1
    delete cur;//удаляется все что содержал в себе элемент(включая данные)
вот смотри, вот ты написал, а с чего это ты взял, что данные удалятся вместе с узлом ?
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 02:41  [ТС]
т.к элемент cur включает в себя поля с данными т.е строка удалится
а голова переместится

C++
1
k[]=k[]->next
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.11.2010, 02:42
у тебя была программа почти законченная, ты взял понаписал какой-то лажи

Цитата Сообщение от Artishok
я хотел таким образом завершать процедуру.что бы знать удалился или нет элемент
да, а ты знаешь, что это можно узнать без создания всяких строк
1
13.11.2010, 02:43  [ТС]

Не по теме:

значит мне труба во вторник.ну что ж...пора спать

0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.11.2010, 02:51
Цитата Сообщение от Artishok
т.е строка удалится
как это она удалится, а ты расчитываешь туда константы записывать ?
а как ты будешь формировать строки, прямо в исходнике ?

Добавлено через 6 минут
тебе нужно данные вводить, ты константы не введёшь никак, они компилируются один раз
значит тебе нужно вводить в массив, а если ты будешь сохранять в узел указатель на массив, то у тебя во всех узлах будет одно и то же значение (самое последнее из введённых в массив)

из-за этого создаются копии строк, чтобы массив можно было дальше юзать, а строки в таблице не менялись из-за него, копии создают с выделением памяти, а выделенную память всегда нужно освобождать, когда она больше не используется (иначе память у программы растёт и не уменьшается)

у тебя было всё сделано, кроме ввода и массива соответствующего
ты не понимал, что по указателю, который ещё никуда не указывает, нельзя ничего писать
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 15:03  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
она больше не используется (иначе память у программы растёт и не уменьшается)
сборщика мусора не хватает

Добавлено через 18 минут
Цитата Сообщение от accept Посмотреть сообщение
ты не понимал, что по указателю, который ещё никуда не указывает, нельзя ничего писат
то есть надо
C++
1
char s1[15];cin>>s1;
а указатель в функции использовать?
но если не изменять ничего кроме ввода то insert(s1,d) вылетает с ошибкой тоже.


я понял почему новый вариант неправильный.
у меня создавался список но при этом он не был связан с хеш-таблицей т.к. не имел кода
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.11.2010, 15:17
C++
1
2
    char s1[15];
    cin >> s1;
можно и так

C++
1
2
3
4
    char s1[15], *p;
 
    p = s1;
    cin >> p;
и так

дальше функция insert, получая строку, делает её копию
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
14.11.2010, 16:35  [ТС]
и все равно с ошибкой вылетает

Добавлено через 5 часов 8 минут

Не по теме:

никогда не увижу рабочей программы...блин.из-за чего она вылетает!?:wall:



Добавлено через 19 часов 54 минуты

Не по теме:

:wall::wall:%-)

0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.11.2010, 22:50
ну что, продвинулся как-нибудь ?
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 00:21  [ТС]
добавил только функцию вывода значений.
но почему вылетает понять не могу.
вроде все нормально.
надо бы тип значений изменить и проверить но тогда хеш-функцию менять надо.

Добавлено через 8 минут
нет.даже на int типе вылетает.
что-то тут с функцией вставки

Добавлено через 51 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void show(dictionary k)//ïðîñìîòð òàáëèöû
{
    spis *cur;//äëÿ ñîõðàíåíèÿ ãîëîâû
    for (int i=0;i<maxn;i++)
        {
         cur=k[i];
         cout<<i<<" ";
         while (cur->next!=0)//ïîêà íå äîéäåò äî ïîñëåäíåãî ýëåìåíòà
         {
           cout<<cur->val<<" ";//ïîëå äàííûõ âûâîäèòü
               cur=cur->next;
         }
          cout<<endl;//ïåõîä íà ñëåäóþùóþ ñòðîêó
        }
}
тут все-таки что-то с массивом.когда я создал функцию вывода и проверил её то получил "смайлики"...
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.11.2010, 01:13
здесь cur->val, в последнем коде elem->s
значит у тебя всё по-старому
действительно так трудно сконцентрироваться на одном коде ?
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 01:38  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
действительно так трудно сконцентрироваться на одном коде
я новый удалил раз он был полностью неверен.а старый я и не удалял.

код должен теоретически работать.но не работает.
хм.
может быть я не выделяю память под массив указателей?
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.11.2010, 01:55
не, ты не можешь написать функцию insert
а то, что ты выделяешь память под массив указателей - это тебе показалось
потому что ты ни в новом, ни в старом коде не выделял память под массив указателей
и естественно тебе никто не говорил выделять под него память
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 12:23  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
а то, что ты выделяешь память под массив указателей - это тебе показалось
потому что ты ни в новом, ни в старом коде не выделял память под массив указателей
я не говорил что выделяю память под массив указателей.

Цитата Сообщение от accept Посмотреть сообщение
естественно тебе никто не говорил выделять под него память
так надо выделять память или не надо?
в insert выделяется память только для узла.но ведь узел это и есть элемент массива т.е. выделяется память для элемента массива.

Добавлено через 3 минуты
C++
1
2
3
 for(int i=0;i<maxn;i++)
   d[i]=new spis;
   insert(s1,d);
когда я сделал так то вылетать с ошибкой перестало.
решил проверить show и тогда "полетели" иероглифы

теперь надо думать что не так в show.происходит там зацикливание.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.11.2010, 12:27
Цитата Сообщение от accept Посмотреть сообщение
C
1
struct celltype *dictionary[B-1];
. На сях указывается не диапазаон индексов, а их количество, кроме того, struct предназначен для объявленяи типа структуры, а не переменных этого типа, поэтому
C
1
celltype *dictionary[B];
.
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 12:35  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
ипа структуры, а не переменных этого типа
так это и есть стуктура.структура массив указателей

Добавлено через 48 секунд
и потом создавать переменные типа

C++
1
dictionary d;
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.11.2010, 13:34
Цитата Сообщение от Artishok
но ведь узел это и есть элемент массива
нет, элемент массива - это адрес, это может быть адрес узла, а может быть нулевой адрес, и любой из них является элементом массива

C
1
struct celltype *dictionary[B];
массив на B указателей, если B равно 5, то массив указателей 0, 1, 2, 3, 4 - пять штук

celltype можно использовать без ключевого слова struct только в C++

Добавлено через 3 минуты
Цитата Сообщение от Artishok
так это и есть стуктура.структура массив указателей
структура - это один узел, а d - это массив указателей на структуры, массив адресов
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
16.11.2010, 00:10  [ТС]
я так и не понял для чего нужна эта строчка
C
1
char *x1=new char[strlen(x)+1];
можно ведь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
void shoot(char *x)
{  
   char *x1=x;
   cout<<x1<<endl;
}
 
int main()
{
    char x[5];
    cin>>x;
    shoot(x);
}
Добавлено через 26 минут
гляньте заодно закрытое хеширование

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
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#define maxn 1000
 
using namespace std;
 
const char *empty="          ";
      char *deleted="**********";
      
struct char dictionary[maxn];//массив символов.а как массив строк?
 
int
 
void makenull(dictionary *d)
{
    for(int i=0;i<maxn;i++)
    d[i]=empty;
}
 
int locate(char *x;dictionary *d)
{
    int i=0,initial=h(x);
    while(i<maxn)&&d[initial+i]%maxn!=x)&&(d[initial+i]%maxn!=empty)//пока не прйдет до конца и не равно x и не пустая строка
    i++;
    return (initial+i)%maxn;
}
 
int locatel(char *x,dictionary *d)
{
    int i=0,initial=h(x);
    while(i<maxn)&&(d[initial+i]%maxn!=x)&&(d[initial+i]%maxn!=empty)&&(d[initial+i]%maxn!=deleted)
    i++;
    return (initial+i)%maxn;
}
 
void insert(char *x,dictionary *d)
{
    int bucket;
    if d[locate(x)]!=x
    {
        bucket=locatel(x);
        if d[bucket]==empty || d[bucket]==deleted
            d[bucket]=x;
            else
            cout<<"It's full"<<endl;
    }
}
 
void del(char *x,dictionary *d)
{
    int bucket=locate(x);
    if d[locate(x)]==x
     d[bucket]=deleted;
}
Добавлено через 16 секунд

Не по теме:

осталось 17 часов..:cry:



Добавлено через 5 часов 0 минут
help

Не по теме:

12 часов.....



Добавлено через 2 часа 7 минут

Не по теме:

10 часов:cry::cry:



КЭП: каждый элемент d[i] хранит в себе k[symb] но это не одно и тоже.как сделать так чтобы не выделять память под все указатели,а выделять только при необходимости?

Добавлено через 5 минут
что не так в show?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2010, 00:10

Структуры и указатели
Привет форумчане, столкнулся вот с такой вот задачкой на структуры: 1. Описать структуру с именем PRICE, содержащую следующие поля: -...

Структуры и указатели
Задался парой вопросов. Возможно, уже где-то задавались, поэтому прошу прощения заранее. Ниже описана структура для однонаправленного...

Структуры указатели ссылки
Приветик! Начну сразу с кода. struct data { std::string guid; std::vector&lt;float&gt; price_history; };

Указатели на структуры и функции
Я собственно не хотел бы заводить очередную тему на полезность/бесполезность указателей но думаю немного таки приоткрою завесу. Да, они...

Структуры и указатели на структуры
Так ли я сделал? #include &lt;iostream&gt; struct S { int i; }; void f1(S*s1,int k=0){ s1-&gt;i=k;};


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru