Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 25.02.2019
Сообщений: 26

Проблемы с передачей указателей на структуру в функцию

17.03.2019, 22:11. Показов 628. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблемы в 18 строке кода. Когда я посылаю в функцию два указателя на массив структур ( Частота появления символа , сам символ) Указатель на частоту работает нормально и прога выводит эту частоту, а вот символы от чего-то не появляются. Подскажите, пожалуйста, в чём проблема?
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <conio.h>
 
using namespace std;
 
//Данная программа с помощью алгоритма Хафманна, должна сжимать текст через бинарное дерево поиска.
 
struct SymbolAndFrequencyOfOccurrence//Данная структура создаётся для подсчёта частоты встречи символов в сообщении.
{
    int FrequencyOfOccurrence;
    char Symbol = NULL;
    struct SymbolAndFrequencyOfOccurrence *left;
    struct SymbolAndFrequencyOfOccurrence *right;
}SymbolAndFrequencyOfOccurrence[256];
 
void ShowStruct(int *P1, char *P2)
{
    int i = 0;
    while (SymbolAndFrequencyOfOccurrence[i].Symbol != NULL)
    {
        cout << "Символ '" << SymbolAndFrequencyOfOccurrence[*P2 + i-1].Symbol << "' Частота встречи = " << SymbolAndFrequencyOfOccurrence[*P1 + i-1].FrequencyOfOccurrence << endl;
        i++;
    }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    cout << "Поехали..." << endl;
    int i = 0, ArrayLength=0, NumberOfCharactersInStructure=0;
    char TextToCompress[2000];
    char *buff = new char[256];
    ifstream sms("sms.txt");
    sms.getline(TextToCompress, 1999);
 
    while (TextToCompress[i] != '$')// Производится сам расчёт символов !!!! Можно сделать и так, чтобы данные читались не с одной строки  , а многих!!!
    {
        if (TextToCompress[i] == '/0')
            break;
        for (int u = 0; u < 256; u++)
        {
            if (SymbolAndFrequencyOfOccurrence[u].Symbol == NULL)
            {
                SymbolAndFrequencyOfOccurrence[u].Symbol = TextToCompress[i];
                SymbolAndFrequencyOfOccurrence[u].FrequencyOfOccurrence = 1;
                break;
            }
            if (SymbolAndFrequencyOfOccurrence[u].Symbol == TextToCompress[i])
            {
                SymbolAndFrequencyOfOccurrence[u].FrequencyOfOccurrence++;
                break;
            }
        }
        i++;
    }
    i = 0;
    ///////////////////////////////////////////////////////Контроль символов
    int *pStructureINT = &SymbolAndFrequencyOfOccurrence[i].FrequencyOfOccurrence;
    char *pStructureCHAR = &SymbolAndFrequencyOfOccurrence[i].Symbol;
    ShowStruct(pStructureINT, pStructureCHAR);
    ///////////////////////////////////////////////////////////
    while (SymbolAndFrequencyOfOccurrence[i+1].FrequencyOfOccurrence != NULL)
    {
        int g = 0;
        while (SymbolAndFrequencyOfOccurrence[g+1].FrequencyOfOccurrence != NULL)
        {
            if (SymbolAndFrequencyOfOccurrence[g].FrequencyOfOccurrence > SymbolAndFrequencyOfOccurrence[g + 1].FrequencyOfOccurrence)
            {
                swap(SymbolAndFrequencyOfOccurrence[g].FrequencyOfOccurrence, SymbolAndFrequencyOfOccurrence[g + 1].FrequencyOfOccurrence);
                g++;
            }
            g++;
        }
        i++;
    }
 
    ShowStruct(pStructureINT, pStructureCHAR);
    _getch();
    return 0;
}
Миниатюры
Проблемы с передачей указателей на структуру  в функцию  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2019, 22:11
Ответы с готовыми решениями:

Вызов функции с передачей указателей на два массива
Всем привет, помогите найти ошибку. Суть, из функции main() вызывается функция int test(char* v, char* c) и ей передаётся два указателя на...

Создать програму с передачей параметров по ссылке, использованием указателей и подсчетом количества вызовов
Создайте программу, которая демонстрирует возможность роботы с функциями, используя значения параметров по умолчанию, передачу параметров...

Проблемы с передачей данных по сети
Всем привет. Коротко, что пытаюсь сделать. 1. Читаю бинарный файл картинку QFile...

5
1 / 1 / 0
Регистрация: 25.02.2019
Сообщений: 26
17.03.2019, 22:51  [ТС]
Тут выяснилась ещё одна деталь. В функции поменял значения местами. То есть сначала вывод Частоты, а потом Символа.
Теперь не отображаются числа, но отображаются символы. Значит дело именно в первом появлении структуры в cout.
C++
1
2
3
4
5
6
7
8
9
void ShowStruct(int *P1, char *P2)
{
    int i = 0;
    while (SymbolAndFrequencyOfOccurrence[i].Symbol != NULL)
    {
        cout << "'"<<SymbolAndFrequencyOfOccurrence[*P2 + i - 1].FrequencyOfOccurrence << "' частота появления символа  '" << SymbolAndFrequencyOfOccurrence[*P1 + i - 1].Symbol << "'"<< endl;
        i++;
    }
}
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
17.03.2019, 22:53
Андрей Холодов, что вы пытаетесь сделать?
0
1 / 1 / 0
Регистрация: 25.02.2019
Сообщений: 26
17.03.2019, 22:56  [ТС]
Всё заработало, когда изменил убрал указатель на Чаровский элемент.
C++
1
2
3
4
5
6
7
8
9
void ShowStruct(int *P1)
{
    int i = 0;
    while (SymbolAndFrequencyOfOccurrence[i].Symbol != NULL)
    {
        cout << "'"<<SymbolAndFrequencyOfOccurrence[*P1 + i - 1].FrequencyOfOccurrence << "' частота появления символа  '" << SymbolAndFrequencyOfOccurrence[*P1 + i - 1].Symbol << "'"<< endl;
        i++;
    }
}
Объясните пожалуйста, как это работает? Почему с Чаровским указателем не работало?

Добавлено через 1 минуту
Эта функция должна показывать массив структур. Какой символ сколько раз появляется в сообщении.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
18.03.2019, 02:14
Цитата Сообщение от Андрей Холодов Посмотреть сообщение
Почему с Чаровским указателем не работало?
Ставь там точку останова, и смотри, что туда приходит.

Добавлено через 1 час 55 минут
Зачем в ShowStruct() вообще что-то передавать?

Добавлено через 17 минут
C++
1
2
3
4
5
6
7
8
9
void ShowStruct()
{
    int i = 0;
    while (SymbolAndFrequencyOfOccurrence[i].Symbol != NULL && i < 256)
    {
        cout << "Символ '" << SymbolAndFrequencyOfOccurrence[i].Symbol << "' Частота встречи = " << SymbolAndFrequencyOfOccurrence[i].FrequencyOfOccurrence << endl;
        i++;
    }
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
18.03.2019, 09:51
C++
1
2
3
4
5
6
7
8
9
void ShowStruct()
{
    int i = 0;
    while (i < 256 && SymbolAndFrequencyOfOccurrence[i].Symbol != NULL)
    {
        cout << "Символ '" << SymbolAndFrequencyOfOccurrence[i].Symbol << "' Частота встречи = " << SymbolAndFrequencyOfOccurrence[i].FrequencyOfOccurrence << endl;
        i++;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2019, 09:51
Помогаю со студенческими работами здесь

STM32L011F3 - USART2 проблемы с передачей.
Доброго дня всем. Прошу помочь разобраться. Так как для L0 нет SPL , решил попробовать куб. Инициализирую UART2, выведенный на PA2,...

Проблемы с DOM или передачей параметров функции
Есть 2 гиперссылки, на клик по которым вызывается ф-ция Click, которая показывает или скрывает формочку my_form (не суть важно каким...

Проблемы с передачей цвета из RGB888 в RGB565 (ILI9325)
Имею дисплей 320x240 точек под управлением ILI9325. 16-битный цвет, задаваемый в форме 0x#### (16 bit HEX), где # - шестнадцатеричный...

Проблемы с передачей параметров в поток через TStringList
Добрый день. Есть вариант передачи параметров через string unit Unit1; var Form1: TForm1; implementation {$R *.dfm} uses...

Массив из 10 указателей на структуру
Здравствуйте, никак не могу понять как работают указатели в СИ. Объясню, задачу, которую я должен реализовать в коде. Есть структура...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru