C语言指针、数组和函数的一些总结

主要来自于孟宪福老师的分布式对象课程。

int a[7][8];
// a指向 a-->a[0]-->a[0][0] a[0]是第0行一维数组
// a + i --> a[i] --> a[i][0]
a[i][j];
// 等价于*( *(p + i ) + j)

定义一个函数返回7*8的数组a

int    ( *f () ) [8] 
{
    int a[7][8];
    return a;

}

总结起来就是:

1. 从标识符开始 a. 定义数组,数组的元素是什么? b. 定义函数,函数的返回值是什么? c. 定义指针,指针指向谁?

2. [ ] 和 ( )的优先级大于 *

char f1(int x)
{
    
}
char (* b[]) ( int ) = {f1, f2, f3}
b[0] = f1;
b[1] = f2;
b[2] = f3;
char x = b[0](10);
char y = b[1](20);

一些例子:

int f()[5];  // f是一个函数,函数返回一个数组,错
int f()();//f是一个函数,函数返回一个函数,错
int (*f())[5]; //f是一个函数,函数返回一个指针,指针指向一个有五个元素的数组
int a[6]();// a是一个数组,数组元素是一个函数,错
int (*a[6] ) (); // a是一个数组,数组的元素是指针,指针指向返回类型是int的函数 

最后一个例子:

float f(int x) {   }
float (* func ()) ( int ){   return f;}
float (*p) (int );
p = fun();
float f1 =(*p)(5);

猜你喜欢

转载自www.cnblogs.com/vincent93/p/9162436.html