#include <stdio.h>
typedef int a; // a->int
typedef int* b; // b->int*
typedef int c[10]; // c->int [10]
typedef int (*d)(int ,int ); //d->int(*) (int,int)
int add(int a,int b)
{
printf("%d\n",a+b);
}
int main()
{
a a1 = 1;
printf("%d\n",a1);
b b1 = &a1;
printf("%p\n",b1);
c c1 ;
c1[0] = *b1;
printf("%d\n",c1[0]);
d d1 =&add;
(*d1)(c1[0],2);
}
答案:
1
0x7ffcb868a53c
1
3
至于
typedef 函数指针 而不可以 typedef int (d)(int,int);
个人认为C语言访问函数的时候是根据函数名(或者说是函数的地址)来访问的,所以typedef要定义的是指针,这样才可以替代。
其实
d d1 =&add;
(*d1)(c1[0],2);
==
d d1 =&add;
(*d1)(c1[0],2);
==
d d1 =add;
(d1)(c1[0],2);
==
d d1 =add;
(&add)(c1[0],2);
==
d d1 =*add;
(&add)(c1[0],2);
都是等价的。