Проблемы с пониманием использования указателя void (* fptr) (void) в массиве void

Здесь хранится процедура, которая будет генерировать таблицу на основе данных из одной таблицы и столбца и данных из другой таблицы и столбца.

Функция «sum» (если (col = value, 1,0) ) в качестве значения. Вы можете выбирать из различных функций, таких как MAX (if ()) и т. Д.

delimiter //

  create procedure myPivot(
    in tableA varchar(255),
    in columnA varchar(255),
    in tableB varchar(255),
    in columnB varchar(255)
)
begin
  set @sql = NULL;
    set @sql = CONCAT('select group_concat(distinct concat(
            \'SUM(IF(', 
        columnA, 
        ' = \'\'\',',
        columnA,
        ',\'\'\', 1, 0)) AS \'\'\',',
        columnA, 
            ',\'\'\'\') separator \', \') from ',
        tableA, ' into @sql');
    -- select @sql;

    PREPARE stmt FROM @sql;
    EXECUTE stmt;

    DEALLOCATE PREPARE stmt;
    -- select @sql;

    SET @sql = CONCAT('SELECT p.', 
        columnB, 
        ', ', 
        @sql, 
        ' FROM ', tableB, ' p GROUP BY p.',
        columnB,'');

    -- select @sql;

    /* */
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    /* */
    DEALLOCATE PREPARE stmt;
end//

delimiter ;
0
задан Indrajith Ekanayake 7 March 2019 в 11:20
поделиться

1 ответ

typedef void (*fptr)(void);

Определяет тип fptr как указатель на функцию, которая возвращает значение указанного типа (void) и требует указанных параметров (void)

fptr  ptrs[3] = { NULL, get_wisdom, put_wisdom };

Определяет ptrs как вектор 3 элемента, каждый из которых является указателем на одну функцию, которая имеет void в качестве параметра (что угодно) и возвращает void.

  • ptrs [0] = NULL ; Первый указатель указывает на NULL.
  • ptrs [1] = get_wisdom ; Второй указатель указывает на функцию «get_wisdom».
  • ptrs [2] = put_wisdom ; Третий указатель указывает на функцию «put_wisdom».
0
ответ дан Pierluigi 7 March 2019 в 11:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: