No 1.

int (*func_p)(double)

解读:
func_p首先是一个函数指针.
func_p是一个指向参数为double,返回值为int的函数指针.

No 2.

int *hoge[10]

hoge是一个指向int的指针的数组(元素个数为10)

No 3.

double (*array_p)[3]

array_p是指向double(元素个数为三)的数组的指针
array_p = &array;这样赋值没有问题,因为类型相同。
如果array_p=array编译器就会发出警告,提示如下:
指向int的指针和指向int的数组(元素个数3)的指针是完全不同的数据类型.

No 4.

int *func_table[10])(int a)

指向返回int的函数(参数类型是int)的指针的数组(元素个数为10)

范例:

/*
    Name: 函数指针数组
    Copyright: 52coder.net
    Author: 52coder
    Date: 03/06/17 17:24
    Description: pointer
 */

#include <stdio.h>
#include <stdlib.h>

int func(int a)
{
    printf("function func\n");
    return a;
}

int main()
{
    int (*func_table[10])(int a);
    func_table[0]=func;
    func_table[0](2017);
    
    func_table[1]=func;
    func_table[1](2018);
    return 0;
}

No 5.
C语言中不存在多维数组.
对于如下声明:

int hoge[3][2];

解读为:数组hoge有2个元素,元素类型是int[3的数组]
No.6
左值与右值的区别
表达式代表某处的内存区域的时候,我们称当前的表达式为左值,相对的是表达式只是代表值的时候,我们称当前的表达式为右值.