Что означает int (abc) (int, int)? - PullRequest
3 голосов
/ 11 июня 2019

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

#include<bits/stdc++.h>
int add(int a,int b){ 
    return 1729; }
int main(){
    int (abc)(int,int);
    abc = add;
    return 0;
}

Выдается ошибка:

cannot convert 'int(int, int)' to 'int(int, int)' in assignment

Но так как abc и add относятся к одному и тому же типу, почему он должен преобразовываться?Или можно назначить функции новым переменным?Если да, то как это сделать?

1 Ответ

14 голосов
/ 11 июня 2019
int (abc)(int,int);

Это не указатель на функцию.В этом случае лишние скобки не имеют значения, и они эквивалентны

int abc(int,int);

, которая является функцией объявление , которую C ++ позволяет помещать почти в любом месте (как тело другогофункция).Ваш код не компилируется, потому что вы пытаетесь присвоить одно имя функции другому.

Чтобы получить указатель, вам нужен синтаксис указателя

int (*abc)(int,int);

Где, на этот раз, скобки требуется, иначе вы получите объявление функции с int* возвращаемым типом!И теперь задание будет правильно сформировано.

...