Complicated Declarations in C Programming MCQ Questions and Answers

1. What does the declaration int *a[5]; define?
A) An array of 5 pointers to int
B) A pointer to an array of 5 int
C) An array of 5 pointers to int (same as A)
D) A pointer to pointer to int
Answer: C) An array of 5 pointers to int (same as A)

2. What is the type of p in int (*p)[10];?
A) Pointer to int
B) Pointer to an array of 10 int
C) Array of 10 pointers to int
D) Function returning pointer to int
Answer: B) Pointer to an array of 10 int

3. Interpret char *(*fptr)();
A) fptr is a function returning char *
B) fptr is a pointer to a function returning char
C) fptr is a pointer to a function returning char *
D) fptr is a function returning pointer to function that returns char *
Answer: C) fptr is a pointer to a function returning char *

4. What does int (*fn())(); declare?
A) fn is a function returning int
B) fn is a function returning pointer to int
C) fn is a function returning a pointer to a function returning int
D) fn is a pointer to function returning int (*)()
Answer: C) fn is a function returning a pointer to a function returning int

5. What does int *(*arr[3])(); represent?
A) Array of 3 pointers to int
B) Array of 3 pointers to functions returning pointer to int
C) Pointer to array of 3 functions returning int *
D) Function returning array of 3 pointers to int
Answer: B) Array of 3 pointers to functions returning pointer to int

6. What does void (*signal(int, void (*)(int)))(int); from the classic signal prototype mean?
A) signal returns void
B) signal is a pointer to signal handling function
C) signal is a function taking (int, pointer-to-function(int)->void) and returning pointer-to-function(int)->void
D) signal takes a function and returns an int
Answer: C) signal is a function taking (int, pointer-to-function(int)->void) and returning pointer-to-function(int)->void

7. Given const int *p;, what is p?
A) Pointer to a const pointer to int
B) const pointer to int
C) Pointer to const int (i.e., cannot modify *p)
D) Pointer to int where pointer itself is constant
Answer: C) Pointer to const int (i.e., cannot modify *p)

8. Given int * const p;, what is p?
A) Pointer to constant int
B) Constant pointer to int (i.e., p can’t change, *p can)
C) Constant pointer to constant int
D) Pointer to pointer to const int
Answer: B) Constant pointer to int (i.e., p can’t change, *p can)

9. Which declaration defines p as pointer to function returning pointer to array of 5 int?
A) int (*(*p)()) [5];
B) int (*(*p)()) [5];
C) int (*p()) [5];
D) int *(*p())[5];
Answer: B) int (*(*p)()) [5];

10. What is declared by int (*(*x[3])())[5];?
A) x is an array of 3 pointers to arrays of 5 ints
B) x is an array of 3 pointers to functions returning pointer to array[5] of int
C) x is pointer to function returning array of 3 pointers-to-5-int arrays
D) x is function returning array of 3 pointers-to-5-int arrays
Answer: B) x is an array of 3 pointers to functions returning pointer to array[5] of int

11. Which of the following is equivalent to typedef int arr5_t[5]; arr5_t *p;?
A) int *p[5];
B) int (*p)[5];
C) int (*p)[5];
D) int p[5];
Answer: C) int (*p)[5];

12. What does int (* const fptr)(double); declare?
A) Function returning const pointer to int
B) Const pointer to function taking double returning int
C) Pointer to const function
D) Function pointer returning pointer to int
Answer: B) Const pointer to function taking double returning int

13. Which declaration correctly defines a pointer to function returning void and taking int?
A) void (*fp)(int);
B) void (*fp)(int);
C) void *fp(int);
D) void fp(*)(int);
Answer: B) void (*fp)(int);

14. For int *(*(*f)())[10];, what is f?
A) f is a function returning pointer to int
B) f is a pointer to function returning pointer to array[10] of int*
C) f is pointer to array[10] of pointers to functions returning int
D) f is function pointer returning pointer to pointer to int
Answer: B) f is a pointer to function returning pointer to array[10] of int*

15. What does int (*(*(*g)(void))(int))[5]; represent (read succinctly)?
A) g is a pointer to an int
B) g is function returning pointer to pointer to int
C) g is function returning pointer to function returning int
D) g is a function taking void and returning a pointer to a function (taking int) returning pointer to array[5] of int
Answer: D) g is a function taking void and returning a pointer to a function (taking int) returning pointer to array[5] of int

16. In volatile int *p;, which is volatile?
A) p (the pointer)
B) *p (the pointed-to int)
C) *p (the int itself is volatile)
D) Both p and *p
Answer: C) *p (the int itself is volatile)

17. In int * volatile p;, which is volatile?
A) p (the pointer is volatile)
B) *p (the pointed-to int is volatile)
C) Both p and *p
D) Neither
Answer: A) p (the pointer is volatile)

18. Which declaration gives p type: pointer to array of pointers to char?
A) char **p[10];
B) char *(*p)[10];
C) char *(*p)[]; (generic)
D) char *(*p)[N]; (with N known)
Answer: C) char *(*p)[];

19. Which typedef makes pf a pointer to a function that returns float and takes int?
A) typedef float pf(int);
B) typedef float (*pf)(int);
C) typedef float (*pf)(int);
D) typedef float *pf(int);
Answer: C) typedef float (*pf)(int);

20. What does int (*(*h)(int))[3]; declare h as?
A) h is pointer to array of 3 ints
B) h is a function taking int and returning pointer to array[3] of int
C) h is a pointer to function returning array of pointers
D) h is an array of pointers to functions returning int
Answer: B) h is a function taking int and returning pointer to array[3] of int

21. Which of the following is the correct way to declare an array of function pointers that return double and take no arguments?
A) double (*arr[5])();
B) double ( *arr[5] ) (void);
C) double (*arr[5])(void);
D) double *arr[5]();
Answer: C) double (*arr[5])(void);

22. What is the meaning of int (*p[])();?
A) p is an array of functions returning int
B) p is an array of pointers to functions returning int
C) p is pointer to array of function pointers
D) p is function returning array of pointers to int
Answer: B) p is an array of pointers to functions returning int

23. Which declaration defines p as pointer to a function that returns pointer to function returning int?
A) int (*p())();
B) int (*(*p)())();
C) int (*(*p)())();
D) int *(*p)();
Answer: C) int (*(*p)())();

24. For int (*p)(double);, which of the following statements is correct?
A) p is an integer
B) p is pointer to int returned by double
C) p is pointer to function taking double and returning int
D) p is function returning pointer to double
Answer: C) p is pointer to function taking double and returning int

25. What does char (*(*x[])())[]; describe?
A) x is array of pointers to arrays of char
B) x is pointer to function returning pointer to char array
C) x is an array of pointers to functions returning pointer to an array of char
D) x is array of functions returning pointer to char pointers
Answer: C) x is an array of pointers to functions returning pointer to an array of char

26. How is int *(*fp)(int *); best read?
A) fp is function returning pointer to int and taking pointer to int
B) fp is pointer to function taking pointer to int and returning pointer to int
C) fp is pointer to int that is function
D) fp is array of pointers to functions taking int*
Answer: B) fp is pointer to function taking pointer to int and returning pointer to int

27. What does int (*(*a[3])())[4]; declare a as?
A) a is pointer to array of functions
B) a is an array of 3 pointers to functions returning pointer to array[4] of int
C) a is function returning array of three pointers
D) a is pointer to function returning array[3] of pointers to int
Answer: B) a is an array of 3 pointers to functions returning pointer to array[4] of int

28. Which of the following is a pointer to an array type?
A) int *p[10];
B) int (*p)[10];
C) int p(*10);
D) int p[10]*;
Answer: B) int (*p)[10];

29. What is float (*(*pf)(void))[4];?
A) pf is pointer to array of 4 floats
B) pf is pointer to function (void) returning pointer to array[4] of float
C) pf is array of function pointers returning float
D) pf is function returning pointer to pointer to float
Answer: B) pf is pointer to function (void) returning pointer to array[4] of float

30. Which declaration defines q as pointer to pointer to function returning int?
A) int (**q)();
B) int *(*q)();
C) int (**q)();
D) int *(*q)();
Answer: C) int (**q)();

31. Given int *f(void);, which is true?
A) f is pointer to int
B) f is function returning pointer to int
C) f is function returning pointer to int
D) f is pointer to function that returns int
Answer: C) f is function returning pointer to int

32. How do you declare r as pointer to function that returns array[10] of int (hypothetical, actually not allowed directly)?
A) int (*r()) [10];
B) int (*r)[10]();
C) You cannot declare a function returning array directly; you must return pointer to array: int (*r())[10];
D) int r()[10];
Answer: C) You cannot declare a function returning array directly; you must return pointer to array: int (*r())[10];

33. Which declaration makes p a pointer to a const pointer to int?
A) const int **p;
B) int * const *p;
C) int * const *p; (pointer to const pointer to int)
D) int const * const *p;
Answer: C) int * const *p;

34. What is int * const * const p;?
A) Pointer to pointer to const pointer to int
B) Const pointer to const pointer to pointer to int
C) Pointer to const pointer to const int
D) Pointer to pointer to int where inner pointer is const
Answer: B) Const pointer to const pointer to pointer to int

35. For typedef int (*TFP)(double); what is TFP?
A) Function returning int taking double
B) Type alias for pointer to function taking double returning int
C) Pointer to int named TFP
D) Type alias for function pointer returning double
Answer: B) Type alias for pointer to function taking double returning int

36. Which declaration yields p as pointer to an incomplete array type (flexible)?
A) int (*p)[];
B) int *p[];
C) int (*p)[];
D) int p[];
Answer: C) int (*p)[];

37. How does int (*apf[])(double); read?
A) Array of functions returning pointer to int
B) Array of pointers to functions taking double and returning int
C) Pointer to array of function pointers
D) Function returning array of pointers to int
Answer: B) Array of pointers to functions taking double and returning int

38. For the declaration char (*(*x[5])())[10];, what is x?
A) x is array of 5 pointers to arrays of char[10]
B) x is array of 5 pointers to functions returning pointer to array[10] of char
C) x is an array of 5 pointers to functions (no args) returning pointer to array[10] of char
D) x is pointer to function returning array of char
Answer: C) x is an array of 5 pointers to functions (no args) returning pointer to array[10] of char

39. Which is correct: int *arr[3]; vs int (*arr)[3]; — what is the difference?
A) Both same
B) int *arr[3]; is array of 3 pointers to int; int (*arr)[3]; is pointer to array of 3 ints
C) arr[3] is pointer to array, (*arr)[3] is array of pointers
D) None of the above
Answer: B) int *arr[3]; is array of 3 pointers to int; int (*arr)[3]; is pointer to array of 3 ints

40. What does int (*p)(int (*)(int)); declare?
A) p is pointer to function returning pointer to function
B) p is pointer to function that takes a pointer-to-function (int->int) and returns int
C) p is pointer to function returning int and taking int
D) p is pointer to function returning pointer to int
Answer: B) p is pointer to function that takes a pointer-to-function (int->int) and returns int

41. What is the meaning of int (*(*x)())[5];?
A) x is pointer to array of 5 ints
B) x is pointer to function returning pointer to array[5] of int
C) x is function returning pointer to pointer to array
D) x is array of pointers to functions returning int arrays
Answer: B) x is pointer to function returning pointer to array[5] of int

42. Which declaration shows a pointer to function returning pointer to function returning char *?
A) char *(*p())();
B) char *(*(*p)())();
C) char *(*(*p)())();
D) char (*(*p)())();
Answer: C) char *(*(*p)())();

43. Which of the following correctly declares f as function returning pointer to an array of 3 pointers to int?
A) int *(*f())[3];
B) int *(*f())[3];
C) int (*f())[3];
D) int *f()[3];
Answer: B) int *(*f())[3];

44. For int (*(*z[3])())[2];, choose the correct reading:
A) z is array of 3 pointers to arrays of 2 ints
B) z is array of 3 pointers to functions returning pointer to array[2] of int
C) z is pointer to function returning array of 3 pointers to 2-int arrays
D) z is pointer to array of function pointers
Answer: B) z is array of 3 pointers to functions returning pointer to array[2] of int

45. What does void *(*signal(int, void (*)(int)))(int); mean (variation)?
A) signal returns int
B) signal is function taking (int, pointer-to-function(int)->void) and returning pointer to function(int)->void (but with void * mismatch)
C) signal is pointer to void
D) signal takes a void pointer and returns int
Answer: B) signal is function taking (int, pointer-to-function(int)->void) and returning pointer to function(int)->void (but with void * mismatch)

46. How to declare func as pointer to function taking array of 5 char * and returning int?
A) int (*func)(char *[5]);
B) int (*func)(char **);
C) int (*func)(char *[5]); (but array decays to pointer)
D) int *func(char *[5]);
Answer: C) int (*func)(char *[5]);

47. What does int (*x[3])(double); declare?
A) x is pointer to function returning array of 3 ints
B) x is an array of 3 pointers to functions taking double and returning int
C) x is function returning pointer to array[3] of functions
D) x is pointer to array of function pointers
Answer: B) x is an array of 3 pointers to functions taking double and returning int

48. Which declaration indicates p is a pointer to a function that takes no parameters and returns pointer to int?
A) int *p();
B) int (*p)();
C) int *(*p)();? (ambiguous)
D) int *(*p)(void);
Answer: D) int *(*p)(void);
(Note: int *p(); is function returning pointer to int; int (*p)(); is pointer to function returning int; the safe explicit form: int *(*p)(void);)

49. How do you read int (*(*fptr)(int, int []))(double);?
A) fptr is pointer to int
B) fptr is pointer to function taking (int, int[]) and returning pointer to function taking double and returning int
C) fptr is function returning pointer to int
D) fptr is an int array
Answer: B) fptr is pointer to function taking (int, int[]) and returning pointer to function taking double and returning int

50. What is the type of m in int (*m[3])(int, int);?
A) Array of 3 ints
B) Array of 3 pointers to functions taking (int,int) returning int
C) Pointer to array of functions
D) Function returning array of 3 pointers
Answer: B) Array of 3 pointers to functions taking (int,int) returning int

51. Which declaration uses typedef to simplify int (*)(int)?
A) typedef int func(int);
B) typedef int (*funcp)(int);
C) typedef int *funcp(int);
D) typedef int funcp(*)(int);
Answer: B) typedef int (*funcp)(int);

52. Which of these declares pf as pointer to function that returns pointer to char and takes void?
A) char *pf();
B) char (*pf)();
C) char *(*pf)(void);
D) char (*pf)(void);
Answer: C) char *(*pf)(void);

53. What does int *(*(*r)())[10]; declare r as?
A) Pointer to function returning int pointer
B) Pointer to function returning pointer to array[10] of int pointers
C) Array of function pointers
D) Function returning pointer to pointer to int
Answer: B) Pointer to function returning pointer to array[10] of int pointers

54. Which of the following declares a function pointer array that returns pointer to char?
A) char *arr[5]();
B) char *(*arr[5])();
C) char *(*arr[5])(void);
D) char (*arr[5])();
Answer: C) char *(*arr[5])(void);

55. How to declare g as pointer to function returning pointer to pointer to int?
A) int **g();
B) int **(*g)();
C) int **(*g)();
D) int (*g) **();
Answer: C) int **(*g)();

56. What does const char * const *p; represent?
A) Pointer to pointer to const char, both levels not const
B) Pointer to const pointer to const char
C) Pointer to const pointer to const char (outer pointer mutable, inner pointer const, chars const)
D) Const pointer to pointer to const char
Answer: C) Pointer to const pointer to const char (outer pointer mutable, inner pointer const, chars const)

57. Which declaration results in a being an array of 10 pointers to functions returning float?
A) float (*a[10])();
B) float *a[10]();
C) float (*a[10])(void);
D) float a[10]();
Answer: C) float (*a[10])(void);

58. What does int (*(*foo)(int))[7]; mean?
A) foo is pointer to array of 7 ints
B) foo is function taking int and returning pointer to array[7] of int (with * meaning pointer-to-function)
C) foo is array of pointer to functions returning int arrays
D) foo is pointer to function returning array of pointers
Answer: B) foo is function taking int and returning pointer to array[7] of int

59. Which of the following declares pf as pointer to function returning pointer to array of 3 double?
A) double (*pf()) [3];
B) double *(*pf())[3];
C) double (*(*pf)()) [3];
D) double (*pf)[3]();
Answer: C) double (*(*pf)()) [3];

60. Which is true about int *const *q;?
A) q is pointer to const pointer to int
B) q is pointer to const pointer to int (*q is const pointer to int)
C) q is const pointer to pointer to int
D) q is pointer to pointer to const int
Answer: B) q is pointer to const pointer to int (*q is const pointer to int)

61. What does int *(*z())[5]; mean?
A) z is function returning pointer to array[5] of int pointers
B) z is function returning pointer to array[5] of pointers-to-int
C) z is pointer to function returning array of pointers
D) z is pointer to array of functions returning int pointers
Answer: B) z is function returning pointer to array[5] of pointers-to-int

62. Which declaration declares p to be pointer to array of unknown size of pointers to char?
A) char **p[];
B) char *(*p)[];
C) char *(*p)[];
D) char *p[];
Answer: C) char *(*p)[];

63. How do you declare ap as pointer to array[10] of pointer-to-int?
A) int *(*ap)[10];
B) int (*ap)[10];
C) int *(*ap)[10];
D) int **ap[10];
Answer: C) int *(*ap)[10];

64. What is int (*(*apf[5])())();?
A) Array of 5 pointers to functions returning pointer to function returning int
B) An array of 5 pointers to functions returning pointers to functions returning int
C) Array of 5 functions returning pointer to int
D) Pointer to array of 5 function pointers returning ints
Answer: B) An array of 5 pointers to functions returning pointers to functions returning int

65. Which declaration declares p as pointer to function that returns a pointer to function returning pointer to int?
A) int *(*(*p)())();
B) int *(*(*p)())();
C) int *(*p())();
D) int (*(*p)())*;
Answer: B) int *(*(*p)())();

66. Read int (*(*(*complex)())[] )(); — what is complex?
A) complex is pointer to array of pointer to functions returning int
B) complex is function returning pointer to an array of pointers to functions returning int
C) complex is array of pointers to functions returning pointer to array
D) complex is pointer to function returning pointer to int arrays
Answer: B) complex is function returning pointer to an array of pointers to functions returning int

67. Which of these declares apf as array of pointers to functions returning pointer to array[8] of short?
A) short (*(*apf[10])()) [8];
B) short *(*apf[10])()[8];
C) short (*(*apf[10])()) [8];
D) short (*apf[10])()[8];
Answer: C) short (*(*apf[10])()) [8];

68. Which statement about typedef int (*FPA)[5]; is correct?
A) FPA is type pointer to 5 ints
B) FPA is type for pointer to array[5] of int
C) FPA is type array[5] of pointers to int
D) FPA is pointer to pointer to int
Answer: B) FPA is type for pointer to array[5] of int

69. What does int (*(*fp)(int))[10]; declare fp as?
A) fp is pointer to array of 10 ints
B) Function taking int and returning pointer to array[10] of int (with fp as pointer to such function)
C) Array pointer to function returning pointer to int array
D) Pointer to function returning pointer to pointer to int
Answer: B) Function taking int and returning pointer to array[10] of int (with fp as pointer to such function)

70. Which declaration is a pointer to an array of functions (not valid directly)?
A) int (*p)();
B) int (*p[])();
C) You cannot have an array of functions — use array of pointers to functions: int (*p[])();
D) int p()[5]();
Answer: C) You cannot have an array of functions — use array of pointers to functions: int (*p[])();

71. Which correctly declares q as pointer to function that takes a pointer to char and returns pointer to char?
A) char *q(char *);
B) char *(*q)(char *);
C) char *(*q)(char *);
D) char (*q)(char *);
Answer: C) char *(*q)(char *);

72. For int (*(*arr[2])(void))[4];, what is arr?
A) Array of 2 functions returning pointer to int arrays
B) Array of 2 pointers to functions (void) returning pointer to array[4] of int
C) Pointer to array of 2 function pointers
D) Array of functions returning arrays of pointers
Answer: B) Array of 2 pointers to functions (void) returning pointer to array[4] of int

73. Which is true for const char *(*fptr)(int);?
A) fptr points to function returning pointer to const char
B) fptr is function returning char pointer
C) fptr is pointer to function taking int and returning pointer to const char
D) fptr is const pointer to function returning char pointer
Answer: C) fptr is pointer to function taking int and returning pointer to const char

74. What is the type of p in int (*p)(int)[3]; (note: invalid)?
A) Pointer to function returning array — not allowed; use pointer to array instead
B) p is pointer to function returning array of 3 ints (invalid in C)
C) Invalid: function cannot return arrays; must return pointer to array: int (*p(int))[3];
D) Pointer to array of function pointers
Answer: C) Invalid: function cannot return arrays; must return pointer to array: int (*p(int))[3];

75. Which of these correctly expresses “pointer to function returning pointer to function returning pointer to char”?
A) char *(*(*p)())();
B) char *(*(*p)())();
C) char *(*p())();
D) char (*(*p)())*();
Answer: B) char *(*(*p)())();

76. For int (*(*(*pa)())[3])();, what best describes pa?
A) pa is array of pointers to functions returning arrays
B) pa is function returning pointer to array[3] of pointers to functions returning int**
C) pais pointer to function returning pointer to int arrays
D)pais pointer to array returning pointer to functions
Answer: B)pa is function returning pointer to array[3] of pointers to functions returning int

77. Which is the correct way to typedef an array of 10 pointers to functions returning int?
A) typedef int (*FP)[10];
B) typedef int (*FP[10])(void);
C) typedef int (*FP[10])(void);
D) typedef int (FP)(void)[10];
Answer: C) typedef int (*FP[10])(void);

78. What does int (*(*(*t)[5])())[]; mean for t?
A) t is array of 5 pointers to functions returning pointer to array of int pointers
B) t is pointer to array[5] of pointers to functions returning pointer to array (incomplete) of int
C) t is function returning pointer to array of functions
D) t is array of functions returning pointers to arrays
Answer: B) t is pointer to array[5] of pointers to functions returning pointer to array (incomplete) of int

79. Which declaration declares fn as pointer to function taking pointer to pointer to char and returning void?
A) void (*fn)(char **);
B) void (*fn)(char **);
C) void *fn(char **);
D) void fn(*)(char **);
Answer: B) void (*fn)(char **);

80. What is the correct meaning of int (*fp)(void *);?
A) fp is pointer to function returning void*
B) fp is pointer to function taking void and returning int*
C) fp is function returning pointer to int
D) fp is pointer to int returned by void*
Answer: B) fp is pointer to function taking void and returning int*

81. Which declaration describes a pointer to function that returns an array (not valid directly)?
A) int (*pf)()[10];
B) Not valid; functions cannot return arrays — must return pointer to array: int (*(*pf)()) [10];
C) int *pf()[10];
D) int (*pf())[10];
Answer: B) Not valid; functions cannot return arrays — must return pointer to array: int (*(*pf)()) [10];

82. How to declare p as pointer to array[4] of pointers to functions returning char *?
A) char *(*(*p)[4])();
B) char *(*(*p)[4])();
C) char *(*p[4])();
D) char *(*p)()[4];
Answer: B) char *(*(*p)[4])();

83. What is the proper reading of int (*(*g())())[5];?
A) g returns pointer to array[5] of ints
B) g is function returning pointer to function returning pointer to array[5] of int
C) g is pointer to function returning array of 5 pointer-to-int
D) g is array returning pointer to function
Answer: B) g is function returning pointer to function returning pointer to array[5] of int

84. Which declaration matches “pointer to a function that returns pointer to function that takes double and returns int”?
A) int (*(*p)())(double);
B) int (*(*p)())(double);
C) int (*p())(double);
D) int *(*p())(double);
Answer: B) int (*(*p)())(double);

85. For int *(*f())[]; what is f?
A) f is function returning pointer to array of pointers to int (incomplete)
B) f is pointer to function returning array of int pointers
C) f is function returning pointer to array (unknown size) of pointers to int
D) f is array of pointer to function returning int pointer
Answer: C) f is function returning pointer to array (unknown size) of pointers to int

86. Which correctly declares arr as array of 6 pointers to functions returning pointer to double?
A) double *(*arr[6])();
B) double *(*arr[6])(void);
C) double (*arr[6])();
D) double *arr[6]();
Answer: B) double *(*arr[6])(void);

87. Which of the following is legal and indicates a function pointer returning a pointer to an incomplete array?
A) int (*(*fp)())[ ];
B) int (*(*fp)())[]; (pointer to array of unspecified size)
C) int (*fp[])();
D) int (*( *fp()))[];
Answer: B) int (*(*fp)())[];

88. What does void (*handler)(int, …); mean?
A) handler is pointer to function taking int and returning void
B) handler is pointer to function taking int and variadic arguments, returning void
C) handler is pointer to variable arguments
D) handler is variadic pointer
Answer: B) handler is pointer to function taking int and variadic arguments, returning void

89. Interpret int (*(*p)(int))[3]; succinctly:
A) p is pointer to array of 3 ints
B) p is function (taking int) returning pointer to array[3] of int (as a pointer-to-function)
C) p is array of pointers to functions returning int arrays
D) p is pointer to pointer to function returning int
Answer: B) p is function (taking int) returning pointer to array[3] of int (as a pointer-to-function)

90. Which declaration gives pp type pointer to pointer to pointer to function returning int?
A) int (*(**pp))();
B) int (*(**pp))();
C) int (**(*pp))();
D) int ***pp();
Answer: B) int (*(**pp))();

91. How is int (*(*pf[2])(float))[3]; read?
A) Array of 2 pointers to functions returning pointer to array[3] of int
B) pf is an array of 2 pointers to functions taking float and returning pointer to array[3] of int
C) Pointer to array of 2 functions returning int arrays
D) Array of 2 functions returning pointer to pointer to int
Answer: B) pf is an array of 2 pointers to functions taking float and returning pointer to array[3] of int

92. Which declaration is best to represent “array of pointers to functions returning pointer to char”?
A) char *(*a[])();
B) char *a[]();
C) char *(*a[])();
D) char (*a[])();
Answer: C) char *(*a[])();

93. What does char *(*(*z())[])(); denote?
A) z is function returning pointer to array of function pointers returning char*
B) *z is function returning pointer to an array (unspecified) of pointers to functions returning char
C) zis pointer to array of char pointers
D)zis array returning pointer to char functions
Answer: B)z is function returning pointer to an array (unspecified) of pointers to functions returning char

94. For int (*(*arr[])())[];, which is correct?
A) arr is array of pointers to functions returning pointer to array (unspecified) of int
B) arr is an array of pointers to functions returning pointer to arrays of int (size unspecified)
C) arr is pointer to array of functions returning pointer to int arrays
D) arr is function returning pointer to array of pointers
Answer: B) arr is an array of pointers to functions returning pointer to arrays of int (size unspecified)

95. What does int (*(*x())[])(); mean?
A) x is function returning pointer to array of function pointers returning int
B) x is function returning pointer to array (unspecified) of pointers to functions returning int
C) x is pointer to function returning int arrays
D) x is array of pointer to functions returning pointer to int
Answer: B) x is function returning pointer to array (unspecified) of pointers to functions returning int

96. Which declaration declares foo as pointer to function that returns pointer to a 2D array (not directly allowed)?
A) int (*foo()) [3][4];
B) int (*(*foo)())[3][4]; (pointer to function returning pointer to 2D array)
C) int (*foo())[3][4];
D) int (*foo())[3][4];
Answer: B) int (*(*foo)())[3][4];

97. Which is correct reading of void *(*(*fp)(void))[10];?
A) fp returns pointer to void
B) fp is pointer to function(void) returning pointer to array[10] of void
C) fpis array of 10 void pointers
D)fpis function returning pointer to pointer to void
Answer: B)fp is pointer to function(void) returning pointer to array[10] of void

98. What does int (*(*(*r)())[4])(); describe?
A) r is pointer to pointer to array of functions
B) r is a function returning pointer to array[4] of pointers to functions returning int
C) ris array of pointers to functions returning pointer to arrays
D)ris pointer to function returning pointer to array of ints
Answer: B)r is a function returning pointer to array[4] of pointers to functions returning int

99. Which describes int (*(*(*x)())[5])();?
A) x is pointer to function returning pointer to array of 5 ints
B) x is function returning pointer to array[5] of pointers to functions returning int
C) xis array of pointers to functions returning pointer to array[5] of ints
D)xis pointer to array returning pointer to function
Answer: B)x is function returning pointer to array[5] of pointers to functions returning int

100. Which of the following best expresses a pointer to a function returning a pointer to incomplete type struct S?
A) struct S *(*fp)();
B) struct S *(*fp)();
C) struct S (*fp)();
D) struct S **fp();
Answer: A) struct S *(*fp)();