#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int *(*FF(int T[],int k))[2];
int main(){
int TAB[4][6];
int *(*(*a_1)(int [], int))[2]=FF+1;
int *(*a_2)[2]=FF(TAB[1],6)+2;
int **a_3=*FF(*TAB,0);
int *a_4=**FF(*TAB,0);
return 0;
}
既然
FF
返回一个指向两个整数指针数组的指针,这里取消引用结果 *FF(*TAB,0)
应该是两个 int 指针数组中的第一个指针,那么为什么 a_3
是一个双指针呢?与 a_4
相同 - 取消引用双指针应该返回一个值 (int
),但它是一个指针。
返回一个指向由两个整数指针组成的数组的指针FF
正确。
在这里取消引用结果
应该是两个int指针数组中的第一个指针*FF(*TAB,0)
这是错误的。该函数返回一个指向数组的指针。取消引用会提供数组本身,然后该数组会衰减为指向其第一个元素的指针。由于元素类型为
int*
,因此从数组衰减的类型为 int**
。
与 a_4 相同 - 取消引用双指针应该返回一个值(int),但它是一个指针
同上。请记住,数组会衰减为指向其第一个元素的指针,而不是第一个元素本身。