请参加C语言基础测试,200分奖励

「已注销」 2014-12-04 01:40:24
考考诸位:

typedef int * (**(*AT)())[];

用中文说出AT的具体类型。

最先答对的奖励200分,答错的答慢的不给分。

(PS: 几位老师就不要回答本题了,将机会留给学生们吧。特别是赵老师,请不要写出答案,谢谢啦。)
...全文
188 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-12-04
  • 打赏
  • 举报
回复
《牛肉干》 C语言上机课,某女同学偷偷吃起牛肉干。 有一粒牛肉干掉到了键盘上,卡在7和8键之间。 女同学就在键盘上抠啊、抠啊、抠啊…… 程序里一行代码变成这个样子: int *pa=&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a; 后来的结局是 ————程序顺利通过编译,运行结果正确!
一根烂笔头 2014-12-04
  • 打赏
  • 举报
回复
返回值类型:int * (**)[] 这个一个指针类型 函数指针:(*AT)() 因此AT还是一个函数指针类型,验证代码如下

#include <stdio.h>
typedef int * (**(*AT)())[];

AT special;

int *(**array)[2];

int * (**fun(void))[]
{
	printf("special return type\n");
	return array;
}

int main(void)
{
	int *(**p)[];
	special = fun;
	p = special();
	return 0;
}
均陵鼠侠 2014-12-04
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
[quote=引用 8 楼 sholber 的回复:] 赵四老湿心说不让俺参与拉倒,正好俺也不会。
激将法是不?我还真吃这套! 仅供参考:
//char (*(*x[3])())[5];//x是什么类型的变量?
//
//分析C语言声明,关键是搞清楚这个变量是个什么东西(函数、指针、数组),
//是函数那么剩下的就是他的参数和返回值,
//是指针那剩下部分是说明他指向什么,
//是数组剩下的部分就是说明数组的成员是什么类型。
//解析C语言声明规则:
//从左侧第一个标识符开始,按照优先级进行结合。*表示是..的指针,const表示只读的,volatile表示可变的,[]表示是数组,()表示是函数。
//
//x和[3]结合说明是一个大小为3的数组,该数组的每个元素为一类指针,该类指针指向一类函数,该类函数无参数,返回一类指针,该类指针指向一个大小为5的char型数组
#include <stdio.h>
#include <typeinfo.h>
char num[5];
char (*x00())[5] {
    return #
}
int main() {
    char (*x000)[5];//返回值
    char (*(x00)())[5];//函数原型,参数为空,返回值为指针
    char (*(*x0)())[5];//数组的元素,是个函数指针
    char (*(*x[3])())[5];//是个数组,大小为3

    x0 = x00;
    x[0] = x0;
    x[1] = x0;
    x[2] = x0;
    printf("typeid(x).name() is %s\n",typeid(x).name());
    return 0;
}
//typeid(x).name() is char (* (__cdecl**)(void))[5]
[/quote] 赵四老湿,C1X已经支持泛型了。你能用C的泛型来搞一下嘛?
赵4老师 2014-12-04
  • 打赏
  • 举报
回复
引用 8 楼 sholber 的回复:
赵四老湿心说不让俺参与拉倒,正好俺也不会。
激将法是不?我还真吃这套! 仅供参考:
//char (*(*x[3])())[5];//x是什么类型的变量?
//
//分析C语言声明,关键是搞清楚这个变量是个什么东西(函数、指针、数组),
//是函数那么剩下的就是他的参数和返回值,
//是指针那剩下部分是说明他指向什么,
//是数组剩下的部分就是说明数组的成员是什么类型。
//解析C语言声明规则:
//从左侧第一个标识符开始,按照优先级进行结合。*表示是..的指针,const表示只读的,volatile表示可变的,[]表示是数组,()表示是函数。
//
//x和[3]结合说明是一个大小为3的数组,该数组的每个元素为一类指针,该类指针指向一类函数,该类函数无参数,返回一类指针,该类指针指向一个大小为5的char型数组
#include <stdio.h>
#include <typeinfo.h>
char num[5];
char (*x00())[5] {
    return #
}
int main() {
    char (*x000)[5];//返回值
    char (*(x00)())[5];//函数原型,参数为空,返回值为指针
    char (*(*x0)())[5];//数组的元素,是个函数指针
    char (*(*x[3])())[5];//是个数组,大小为3

    x0 = x00;
    x[0] = x0;
    x[1] = x0;
    x[2] = x0;
    printf("typeid(x).name() is %s\n",typeid(x).name());
    return 0;
}
//typeid(x).name() is char (* (__cdecl**)(void))[5]
fly_dragon_fly 2014-12-04
  • 打赏
  • 举报
回复
AT 是函数指针,返回类型为 int *(**) [];
均陵鼠侠 2014-12-04
  • 打赏
  • 举报
回复
Define AT as a type pointer to function returning pointer to pointer to array of pointer to int
均陵鼠侠 2014-12-04
  • 打赏
  • 举报
回复
赵四老湿心说不让俺参与拉倒,正好俺也不会。
赵4老师 2014-12-04
  • 打赏
  • 举报
回复
FightForProgrammer 2014-12-04
  • 打赏
  • 举报
回复
AT是一个函数指针,他指向一个函数,这个函数返回一个指针,这个指针指向类型为int的数组
「已注销」 2014-12-04
  • 打赏
  • 举报
回复
引用 4 楼 qq_24182661 的回复:
自定义的函数指针
不够具体。
kiomi_kiomi 2014-12-04
  • 打赏
  • 举报
回复
自定义的函数指针
w74839520 2014-12-04
  • 打赏
  • 举报
回复
函数地址,入口
「已注销」 2014-12-04
  • 打赏
  • 举报
回复
还有吗,1小时候结贴。
均陵鼠侠 2014-12-04
  • 打赏
  • 举报
回复
将AT定义为一个指针,该指针指向一个函数,该函数返回一个指向“指向数组的指针”的指针,数组的元素类型是指向int类型的指针。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧