Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2015, 06:22   #51
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Код:
Int num;
Cin>>num;
Int array[num];
Даже такой возможности раньше в C++ не было. Нужно было, чтоб переменная num была константой.

Ошибка с С++ Builder 6:

Цитата:
[C++ Error] Unit1.cpp(16): E2313 Constant expression required
где 16-я строчка - это int array[num];
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 19.08.2015 в 06:24.
Krasiosoft вне форума Ответить с цитированием
Старый 19.08.2015, 06:38   #52
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

В qt компилится без проблем...ладно, но все же)

Как вы считаете, разумнее ли использовать связанные списки? И вообще, т.к. тема про указатель, то интересно вот что:

Код:
Struct spisok
{
Int rndchisl;
Spisok *next;
Spisok *back;
};
Spisok *head;
Как, например, находясл в середине списка вернуться при помощи back на предыдущий элемент?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.08.2015, 06:59   #53
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Как вы считаете, разумнее ли использовать связанные списки?
Все зависит от ситуации. Но если можно обойтись обычным массивом, то лучше использовать его.
Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Код:
Struct spisok
{
Int rndchisl;
Spisok *next;
Spisok *back;
};
Spisok *head;
Как, например, находясь в середине списка вернуться при помощи back на предыдущий элемент?
Код:
Spisok *currElem;
...
//  считаем, что тут currElem это середина списка
currElem = currElem->back;  //  вернулись на предыдущий элемент
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 19.08.2015, 07:05   #54
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо. Но как программа понимает то, что next - это вперед, а back - назад. Вот.
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.08.2015, 07:46   #55
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Программа ничего не понимает. Программист понимает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.08.2015, 08:05   #56
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

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

Код:
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
 
typedef struct {
    int i;
    int j;
} foo;
 
int cmp_i(const void* a, const void* b);
int cmp_j(const void* a, const void* b);
void print(foo* arr, size_t size);
 
int main(void)
{
    foo arr[] = { { 1, 3 }, { 2, 2 }, { 3, 1 } };
    print(arr, 3);
    qsort(arr, 3, sizeof(foo), cmp_j);
    print(arr, 3);
    qsort(arr, 3, sizeof(foo), cmp_i);
    print(arr, 3);
    return 0;
}
 
int cmp_i(const void* a, const void* b)
{
    foo* c = (foo*)a;
    foo* d = (foo*)b;
    return (c->i - d->i);
}
 
int cmp_j(const void* a, const void* b)
{
    foo* c = (foo*)a;
    foo* d = (foo*)b;
    return (c->j - d->j);
}
 
void print(foo* arr, size_t size)
{
    size_t i = 0;
    for (; i < size; ++i)
       printf("%d\t", arr[i].i);
    printf("\n");
}
Там даже в качестве параметров используются указатели, мне это все не очень понятно.

Можете обьяснить то, как вообще демонстрирует этот пример необходимость указателя на функцию?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.08.2015, 08:18   #57
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что такое Callback ты знаешь? Слышал? Событие как работает знаешь? Ты ведь назначая событие по факту передаешь указатель на него в некую функцию класса, которая изначально не знает что ей вызывать. Ты определяешь что вызывать говоря ей указателем.
про Коллбэки почитай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.08.2015, 08:40   #58
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Прочитал и запутался еще больше

Цитата:
передача исполняемого кода в качестве одного из параметров другого кода. Обратный вызов позволяет в функции исполнять код, который задаётся в аргументах при её вызове. ...
Ладно, буду считать что исходный код-это мой код.

А другой код - чей? и часто ли применялось это все в делфи ?..

А что если в аргументах код той же функции? (Круг)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.08.2015, 08:46   #59
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
А другой код - чей? и часто ли применялось это все в делфи ?..
Дык на каждом шагу же?
Есть "не твой" класс TButton, в нем событие OnClick, при срабатывании которого выполняется назначенная в твоем коде процедура.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 19.08.2015, 09:09   #60
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Там даже в качестве параметров используются указатели, мне это все не очень понятно.

Можете обьяснить то, как вообще демонстрирует этот пример необходимость указателя на функцию?
Представьте себе, что в какой-то функции был создан пустой локальный массив:
Код:
int N = 100;
int * array = new int[N];
Теперь, вызываем функцию, которая должна этот массив заполнить. Если мы передадим в вызываемую функцию просто созданный массив, то внутри вызываемой функции мы получим только его копию. Что-бы мы с этой копией ни делали, при выходе из функции, исходный массив, так и останется пустым. Но, если мы сделаем так:
Код:
void MyFunktion(int * array, int i = n)
{
// обработка массива
}
// Обращение к функции
MyFunktion(array, N);
Мы получим ссылку на уже созданный массив и функция будет обрабатывать именно его. Как мы видим, функция ничего не возвратила в явном виде. Но это не так. Исходный массив был изменён и возвращён функцией через её параметры.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 19.08.2015 в 09:11.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
указатели salmon172 Паскаль, Turbo Pascal, PascalABC.NET 0 31.05.2011 21:34
указатели Артэс Общие вопросы C/C++ 4 07.09.2010 11:08
Указатели Анютик_sexi Помощь студентам 3 16.06.2010 14:38
Указатели AquaticSoul Общие вопросы C/C++ 5 22.12.2009 15:13
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39