You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言函数返回指针初始化疑问:多级指针类型匹配困惑

#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的返回类型:int *(*FF(...))[2]表示FF返回的是指向包含2个int*元素的数组的指针,咱们拆解两个疑问:

为什么a_3 = *FF(*TAB,0)是二级指针?

  • FF(*TAB,0)的返回值是int *(*)[2]类型,也就是指向int*[2]数组的指针。
  • 对这个指针解引用*FF(...),得到的是int*[2]类型的数组本身。但在C语言中,数组名出现在表达式里(除了sizeof、取地址&等少数场景),会自动转换成指向数组第一个元素的指针。
  • 这个数组的元素是int*,所以指向第一个元素的指针就是int**类型,刚好匹配a_3的二级指针类型。你以为解引用会直接拿到首个int*,但实际上数组先被转换成了指向它的指针,所以结果是二级指针。

为什么a_4 = **FF(*TAB,0)是一级指针?

  • 第一层解引用*FF(...)得到数组后转成int**(二级指针),第二层解引用**FF(...)就是取这个二级指针指向的内容——也就是数组的第一个元素,而数组元素本身是int*类型,所以结果是一级指针,不是int值。

内容的提问来源于stack exchange,提问作者user24998657

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:44:57