这家伙又emo了 2021-05-08 09:29 采纳率: 84.6%
浏览 78
已采纳

C语言问题!!!请问大佬为什么这种情况他提示数组的下标不同却还可以运行

#include <stdio.h>
char func1() 
{
    return 'a';
}
char func2() 
{
    return 'b';
}
char func3() 
{    return 'c';
}
char (*xarr[])()={func1,func2,func3};//xarr是一个数组
//这个数组有3个指向函数的指针,指针所指(返回)数据类型为字符型。
char (*((*x())[]))()
{
    return &xarr;
}
int main()
{
    printf("%c\n",((*(x()))[0])());//x是一个函数
    //这个函数返回值为指针,这个指针指向数组中的第一个元素
    //这个元素的返回值为这第一个函数的返回值
    return 0;
}

具体图片如下

 

  • 写回答

4条回答 默认 最新

  • 猫叔大鸭梨 2021-05-08 10:20
    关注
    #include <iostream>
    #include <stdio.h>
    char func1()
    {
    	return 'a';
    }
    char func2()
    {
    	return 'b';
    }
    char func3()
    {
    	return 'c';
    }
    char (*xarr[])() = { func1,func2,func3 };//xarr是一个数组
    //这个数组有3个指向函数的指针,指针所指(返回)数据类型为字符型。
    /*
    char (*((*x())[]))()
    {
    	return &xarr;
    }*/
    int main()
    {
    	printf("%c\n", (xarr[0])());//x是一个函数
    	//这个函数返回值为指针,这个指针指向数组中的第一个元素
    	//这个元素的返回值为这第一个函数的返回值
    
    	system("pause");
    	return 0;
    }

    那个x函数返回值不是报错了么

    还有就是为什么不直接调用。。。

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 深度学习残差模块模型
  • ¥20 两个不同Subnet的点对点连接
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计