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

Передача массива в функцию используя указатель на функцию - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Select option консольная команда http://www.cyberforum.ru/cpp-beginners/thread1508212.html
здравствуйте. как можно сделать в консольной команде например: в php HTMl кодах используется <select> и <option> + simbut и в C++ возможно ли сделать такой запрос как select Option только без simbut
C++ Вылетает программа при заполнении массива Добрый день. Решил написать простой код отрисовки карты в консоли. Идея: 1.Создаю объект структуры, содержащий перечень координат в массивах coorx и coory и графическое обозначение 2.Передаю значения координат в ключи массива map и присваиваю ячейке соответственное граф.обозначение Проблема: Для теста решил заполнить массивы coorx и coory на всю ширину и высоту карты. Но, в результате... http://www.cyberforum.ru/cpp-beginners/thread1508177.html
Вращение координаты вокруг точки C++
на входе x, y координаты точки которую нужно вращать и x, y координаты точки во круг которой происходит вращение, также есть угол в градусах ( диапазон от -180* до 180* ) есть форма 300 на 300 нужно чтобы точка во круг которой происходит вращение находилась в центре формы ( 150, 150 ), а остальные точки вращались относительно нее получаю точку во круг которой нужно вращать( диапазан от...
Синхронизация потоков C++
Есть статический класс к которому я хочу обращаться из разных потоков static class MyLog { public: static int log(std::string, int type); }; Внутри написал так
C++ Отправить POST запрос http://www.cyberforum.ru/cpp-beginners/thread1508052.html
Помогите уже, реально задолбался, 2 дня уже ищу рабочий код который бы отправлял пост запрос но никак не могу найти. Везде какие-то либы или паки исходников которые нужно проинсталлить, но даже после инсталла вроде бы код рабочий, но при компиляции выдает кучу ошибок а-ля "ссылка на неразрешенный внешний символ и т.п." Нашел для GET запроса - http://www.cyberforum.ru/post4743606.html . Автор...
C++ CMenu::InsertMenu - обработка сообщения Привет всем, Подскажите, пожалуйста, как обработать сообщение CMenu::InsertMenu посылаемое из внешнего приложения? Resource.h #define ID_EXPCATXML 100 Plugin.h подробнее

Показать сообщение отдельно
Ваю
15 / 15 / 1
Регистрация: 21.04.2015
Сообщений: 475
01.08.2015, 14:04  [ТС]     Передача массива в функцию используя указатель на функцию
Думаю можно сделать если не передачу функций ввода массива, то передачу функции, описывающей массив, например, такой void Array(__int16 * & Arr, unsigned int & SizeW, unsigned int & SizeH), только я не соображу что должна делать такая функция или она просто должна быть типом данных, и класс для неё я не сделаю, только если просто структуру может быть.

Имеющиеся у меня примеры передачи ссылок на функции:
Кликните здесь для просмотра всего текста
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
#include <cstdlib>
#include <iostream>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
 
void Check          (char * Str1, char * Str2, int(*pFooName)(const char * Str1, const char * Str2));
int  CompValues (const char * Str1, const char * Str2);
 
int main(void)
{
    //если не обнулить Err1 - его адрес совпадёт с Str2 - ошибка множественного объявления
    setlocale(0, "ru-ru"); char Str1[80], Str2[80], *Err1 = NULL; 
 
    /* указатель на функцию и его инициализация именем стандартной функции */
    int(*pStrCmp)(const char *Str1, const char *Str2) = &strcmp; 
 
    printf("Введите две строки.\n"); gets_s(Str1, 79); gets_s(Str2, 79);
    strtol(Str1, &Err1, 10);
 
    /*  Передает адрес функции strcmp посредством указателя pStrCmp, 
    **  так же можно непосредственно подставить имя функции, 
    **  в этом случае объявлять указатель на функцию не нужно... 
 
    **  Здесь производится проверка на наличие ошибки преобразования 
    **  и если её нет, то - в качестве входящего значения передаётся 
    **  имя нашей функции, оно сразу подставляется как значение 
    **  переменной, подобно числу, т.е без передачи из некой 
    **  переменной, которая его хранит, иначе передаётся имя 
    **  стандартной функции strcmp посредствам указателя на неё...
 
    */  Str1 != Err1 ? Check(Str1, Str2, CompValues) : Check(Str1, Str2, pStrCmp); 
 
    system("pause");
}
 
void Check(char * Str1, char * Str2, int(*pFooName)(const char * Str1, const char * Str2))
{
    printf("Проверка на совпадение: ");
    pFooName(Str1, Str2) ? printf("Не равны") : printf("Равны"); puts(""); 
}
 
int CompValues(const char * Str1, const char * Str2)
{
    __int64 Val1 = 0, Val2 = 0; char *Err1, *Err2;
 
    Val1 = strtol(Str1, &Err1, 10); Val2 = strtol(Str2, &Err2, 10);
 
    return Val1 == Val2 && Str2 != Err2 ? 0 : 1;
}


Кликните здесь для просмотра всего текста
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
#include <cstdlib>
#include <iostream>
using namespace std;
 
struct user { char* name; char* id; int dept; };
typedef user* Puser;
typedef int(*CFT)(const void *, const void *);
 
void sort(void* base, unsigned n, unsigned int sz, CFT cmp);
void print_id(Puser v, int n);
int cmp1(const void * p, const void * q);
int cmp2(const void * p, const void * q);
 
user heads[] = {
  "Ritchie D.M.",    "dmr",   11271,
  "Sethi R.",        "ravi",  11272,
  "SZYmanski T.G.",  "tgs",   11273,
  "Schryer N.L.",    "nls",   11274,
  "Schryer N.L.",    "nls",   11275,
  "Kernighan B.W.",  "bwk",   11276
};
 
int main() 
{
  sort(heads, 6, sizeof(user), cmp1);
  print_id(heads, 6); // в алфавитном порядке
  cout << "\n";
  sort(heads, 6, sizeof(user), cmp2);
  print_id(heads, 6); // по номерам отделов
    cout << "\n";
    system("pause");
}
 
void sort(void* base, unsigned n, unsigned int sz, CFT cmp) {
    for (int i = 0; i < n - 1; i++)
    for (int j = n - 1; i < j; j--) {
        char* pj  = (char*)base + j * sz; // b[j]
        char* pj1 = pj - sz;              // b[j-1]
        if ((*cmp)(pj, pj1) < 0) { // поменять местами b[j] и b[j-1]
            for (int k = 0; k < sz; k++) {
                char temp = pj[k];
                pj[k] = pj1[k];
                pj1[k] = temp;
            }
        }   // Сортировка вектора "base" из n элементов в возрастающем порядке;
    }       // используется функция сравнения, на которую указывает cmp.
}           // Размер элементов равен "sz". Сортировка пузырьковым методом.
 
void print_id(Puser v, int n)
{
    for (int i = 0; i < n; i++)
        cout    << v[i].name    << '\t'
                    << v[i].id      << '\t'
                    << v[i].dept    << '\n';
}
 
// сравнение строк, содержащих имена
int cmp1(const void * p, const void * q)
{
    return strcmp(Puser(p)->name, Puser(q)->name);
}
 
// сравнение номеров разделов
int cmp2(const void * p, const void * q)
{
    return Puser(p)->dept - Puser(q)->dept;
}
 
Текущее время: 12:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru