C 中函数结果指针的初始化

问题描述 投票:0回答:1
#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
),但它是一个指针。

c function pointers
1个回答
0
投票

FF
返回一个指向由两个整数指针组成的数组的指针

正确。

在这里取消引用结果

*FF(*TAB,0)
应该是两个int指针数组中的第一个指针

这是错误的。该函数返回一个指向数组的指针。取消引用会提供数组本身,然后该数组会衰减为指向其第一个元素的指针。由于元素类型为

int*
,因此从数组衰减的类型为
int**

与 a_4 相同 - 取消引用双指针应该返回一个值(int),但它是一个指针

同上。请记住,数组会衰减为指向其第一个元素的指针,而不是第一个元素本身。

© www.soinside.com 2019 - 2024. All rights reserved.