int (*ptr[3])()
является массив из 3 указателей на функции, возвращающие Int.
Чуть более ясно, это означает, что это массив указателей функций. Массив имеет пространство для 3 из них, и ожидается, что функции возвратят ints.
Некоторые другие вопросы с примерами кода
Были несколько вопросов, с кодом, так что я пошел и прибрала его.
Назначение вне границ в массиве не определено поведение.
test.c:30:3: warning: array index 3 is past the end of the array (which contains 3
elements) [-Warray-bounds]
ptr[3] = ccc;
^ ~
test.c:23:3: note: array 'ptr' declared here
int (*ptr[3])();
Подчищен код:
#include <stdio.h>
/* Missing function prototypes
* For C a function taking no arguments should have void for its argument
* For C++ void can be skipped
*/
int aaa(void);
int bbb(void);
int ccc(void);
/* The function should be declared with type specifier, although it is assumed
* by default to return int.
*/
int aaa(void) {
/* Unless this print statement is going to be part of more output, you should
* return a newline
*/
printf("hi\n");
/* As this function is meant to return an int, we will return 0*/
return 0;
}
int bbb(void) {
printf("hello\n");
return 0;
}
int ccc(void) {
printf("ccc\n");
return 0;
}
int main(void) {
int (*ptr[3])();
ptr[0] = aaa;
ptr[1] = bbb;
/* Now assigning to valid ptr[2] and not out of bounds ptr[3] */
ptr[2] = ccc;
ptr[2]();
}
Обратите внимание, что выходной * возможно * от '«до свидания»', но это зависит от того, довольно много вещей, в первую очередь это missuses * неопределенное поведение * (индексирует массив выходит за пределы). –
Таким образом, это может привести к ошибке, если между «не привязанной» позицией будет записан какой-либо другой процесс. – lifeisshubh
@Someprogrammerdude: "* output может быть by by' "bye" '*« Я бы сказал, что вероятность того, что код OP печатает «bye», очень, очень, очень и очень низкая, чтобы не сказать 0. – alk