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

Разобраться в функции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Компилятор С++ http://www.cyberforum.ru/cpp-beginners/thread638093.html
Скажите, пожалуйста, каким редактором для написания кода вы пользуетесь, и какой компилятор используете? Напишите недостатки и преимущества вашего выбора. Я начинающий программист, пишу и компилирую в оболочке DOSBox на Borland C++ 3.1 Преимущество выбора в том ("выбор" - это громко сказано, я больше не знаю с чем можно работать, а хочу узнать), что после написания кода можно его...
C++ Условие: если строка пустая - выполнить действие Здравствуйте, если можете, помогите создать такое условие: "Условие: если строка пустая - выполнить действие...", на основе этого кода: #include <iostream> using namespace std; int main() { http://www.cyberforum.ru/cpp-beginners/thread638087.html
C++ Сортировка слиянием (рекурсивный метод) текстовой строки
Привет всем. Возникла трудность не понимаю как отсортировать методом слияний (рекурсивным методом) текстовую строку. К примеру дана строка qwerty qwe qwert qwer И должно получиться следующее qwe qwer qwert qwerty Ребят помогите пожалуйста с алгоритмом
Ошибка: Stack was corrupted C++
Здравствуйте уважаемые программисты. Написал простейшую программу заполнения массива и вывода его на консоль. Но при запуске вылазит ошибка (см. прикреплённый файл). Объясните пожалуйста в чём дело? Вот код: #include <iostream> using namespace std; int main() { int mas1; //Получение простых чисел в диапазоне от 2 до 199. for (int i=0; i<=7; i++)
C++ Операторы ввода и вывода http://www.cyberforum.ru/cpp-beginners/thread638040.html
Допустим есть класс class Checked { public: private: double id; int *beg; std::pair<std::strin, std::strin> par;
C++ Деревья Знаю пару тройку фундаментальных структур на основе дерева: красно-черное дерево бинарное древо поиска AVL дерево 2 - 3, 2 - 3 - 4 дерево H дерево Вопрос: подскажите фундаментальные структуры на основе дерева, которые не входят в этот список, для дальнейшего рассмотрения. подробнее

Показать сообщение отдельно
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.08.2012, 03:06     Разобраться в функции
Теперь понял. Первый указатель: (int *)p++; нормально сдвигается. Второй: ((int *)(p[i]))++;, почему-то, не получается сдвинуть.

Добавлено через 33 минуты
Просто p[i]++; нормально сдвигается, но если попытаться привести p[i] к указателю на int и попробовать сдвинуть, то ошибка. Почему это - не понимаю.

Добавлено через 4 часа 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
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include<stdlib.h>
#include"stdio.h"
#include<conio.h>
#include <iostream>
using namespace std;
// Прототипы своих функций
void PrintArray(double **p);
double ** ConstructArray();
void DestructArray(double **p);
//******************************************************************
int main()
{
// указатель на массив указателей на double
double **pA;
clrscr(); // очистка экрана
// построит массив и вернет указатель на него
pA=ConstructArray();
// выведет массив на экран
    PrintArray(pA);
// освободит память
DestructArray(pA);
// подождет нажатия клавиши
getch();
return 0;
}
//******************************************************************
// Функция запрашивает необходимую информацию и строит рваный массив.
//   Возвращает   указатель   на   него.   Количество   массивов double   хранится   в   «минус первом» 
// элементе массива указателей, а в «минус первом» элементе каждого 
// массива – количество элементов в массиве.
double ** ConstructArray()
{
double ** p=NULL;
int N, M; // количество массивов double, элементов в массиве.
// вводим корректное количество массивов
do
{
printf("\nProgram makes an array of N rows.\n");
printf("Please, enter N (1<=N<=10): ");
scanf("%d", &N);
}while(N<1 || N>10);
// выделяем память под массив указателей
p=(double **)malloc( sizeof(double *)*N + sizeof(int));
// запоминаем, в «минус первом» элементе массива указателей, количество массивов double
((int *)p)[0]=N;
// сдвигаем указатель на массив указателей
(int *)p++;
// Организуем ввод элементов массивов double
for(int i=0; i<N; i++)
{
// вводим корректное количество элементов в массиве
do
{
printf("\nEnter M - number of elements in %d-th row (1<=M<=10): ", i);
scanf("%d", &M);
}while(M<1 || M>10);
// выделяем память под массивы double
p[i]=(double *)malloc( M*sizeof(double) + sizeof(int));
// записываем, в -1 элемент массива, количество элементов в массиве.
((int*)(p[i]))[0]=M;
// сдвигаем указатель на массив double
p[i] = (double*)(((int *)*(p + i)) + 1);
for(int j=0; j<M; j++) // вводим элементы
{
double m;
do
{
printf("\nEnter A[%d][%d] (1<=A[%d][%d]<=10): ", i, j, i, j);
scanf("%lf", &m);
}while(m<1 || m>10);
p[i][j]=m;
}
}
return p; // вернуть указатель на сконструированный массив
}
void DestructArray(double **p)
{
if(!p) return;// проверка корректности
int N; // количество строк
N=((int *)p)[-1];
for(int i=0; i<N; i++)
{
    p[i] = (double*)(((int *)*(p + i)) - 1); // сдвигаем назад указатели на массивы double.
    free(p[i]); // освобождаем память под массивами double.
}
(int *)p--;  // сдвигаем назад указатель на массив указателей.
free(p); // освобождаем память под массивом указателей.
}
//******************************************************************// Функция выводит на экран рваный массив
void PrintArray(double **p)
{
int N, M; // количество массивов, элементов в массиве
N=((int *)p)[-1];
for(int i=0; i<N; i++)
{
M=((int *)p[i])[-1];
for(int j=0; j<M; j++) printf("%-6.2lf", p[i][j]);
printf("\n");
}
}

Сдвиг, указателей на double, только так получается сделать:
C++
1
p[i] = (double*)(((int *)*(p + i)) + 1);
Через инкремент это никак не сделать. Не понятно, как такие примеры решения заданий можно приводить?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru