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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.78
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
06.11.2010, 18:20     Указатели на структуры #1
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];
такой?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 02:31     Указатели на структуры #41
C++
1
2
        char ret[8]="no elem";
        char ret1[15]="elemet deleted";
вот это вот, это что вообще, это надо удалить
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 02:35  [ТС]     Указатели на структуры #42
Цитата Сообщение от 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-х буквенного слова прога не вылетает
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 02:40     Указатели на структуры #43
C++
1
    delete cur;//удаляется все что содержал в себе элемент(включая данные)
вот смотри, вот ты написал, а с чего это ты взял, что данные удалятся вместе с узлом ?
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 02:41  [ТС]     Указатели на структуры #44
т.к элемент cur включает в себя поля с данными т.е строка удалится
а голова переместится

C++
1
k[]=k[]->next
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 02:42     Указатели на структуры #45
у тебя была программа почти законченная, ты взял понаписал какой-то лажи

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

Не по теме:

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

accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 02:51     Указатели на структуры #47
Цитата Сообщение от Artishok
т.е строка удалится
как это она удалится, а ты расчитываешь туда константы записывать ?
а как ты будешь формировать строки, прямо в исходнике ?

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

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

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

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


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

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

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

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

Не по теме:

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



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

Не по теме:

accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.11.2010, 22:50     Указатели на структуры #51
ну что, продвинулся как-нибудь ?
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 00:21  [ТС]     Указатели на структуры #52
добавил только функцию вывода значений.
но почему вылетает понять не могу.
вроде все нормально.
надо бы тип значений изменить и проверить но тогда хеш-функцию менять надо.

Добавлено через 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;//ïåõîä Г*Г* ñëåäóþùóþ ñòðîêó
        }
}
тут все-таки что-то с массивом.когда я создал функцию вывода и проверил её то получил "смайлики"...
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.11.2010, 01:13     Указатели на структуры #53
здесь cur->val, в последнем коде elem->s
значит у тебя всё по-старому
действительно так трудно сконцентрироваться на одном коде ?
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 01:38  [ТС]     Указатели на структуры #54
Цитата Сообщение от accept Посмотреть сообщение
действительно так трудно сконцентрироваться на одном коде
я новый удалил раз он был полностью неверен.а старый я и не удалял.

код должен теоретически работать.но не работает.
хм.
может быть я не выделяю память под массив указателей?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.11.2010, 01:55     Указатели на структуры #55
не, ты не можешь написать функцию insert
а то, что ты выделяешь память под массив указателей - это тебе показалось
потому что ты ни в новом, ни в старом коде не выделял память под массив указателей
и естественно тебе никто не говорил выделять под него память
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 12:23  [ТС]     Указатели на структуры #56
Цитата Сообщение от accept Посмотреть сообщение
а то, что ты выделяешь память под массив указателей - это тебе показалось
потому что ты ни в новом, ни в старом коде не выделял память под массив указателей
я не говорил что выделяю память под массив указателей.

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

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

теперь надо думать что не так в show.происходит там зацикливание.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.11.2010, 12:27     Указатели на структуры #57
Цитата Сообщение от accept Посмотреть сообщение
C
1
struct celltype *dictionary[B-1];
. На сях указывается не диапазаон индексов, а их количество, кроме того, struct предназначен для объявленяи типа структуры, а не переменных этого типа, поэтому
C
1
celltype *dictionary[B];
.
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 12:35  [ТС]     Указатели на структуры #58
Цитата Сообщение от taras atavin Посмотреть сообщение
ипа структуры, а не переменных этого типа
так это и есть стуктура.структура массив указателей

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

C++
1
dictionary d;
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.11.2010, 13:34     Указатели на структуры #59
Цитата Сообщение от Artishok
но ведь узел это и есть элемент массива
нет, элемент массива - это адрес, это может быть адрес узла, а может быть нулевой адрес, и любой из них является элементом массива

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

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

Добавлено через 3 минуты
Цитата Сообщение от Artishok
так это и есть стуктура.структура массив указателей
структура - это один узел, а d - это массив указателей на структуры, массив адресов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2010, 00:10     Указатели на структуры
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
16.11.2010, 00:10  [ТС]     Указатели на структуры #60
я так и не понял для чего нужна эта строчка
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 часов..



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

Не по теме:

12 часов.....



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

Не по теме:

10 часов



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

Добавлено через 5 минут
что не так в show?
Yandex
Объявления
16.11.2010, 00:10     Указатели на структуры
Ответ Создать тему
Опции темы

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