永发信息网

C语言 其中typedef char (*AP)[5];自定义的类型是什么?AP?return的是什么???

答案:2  悬赏:10  手机版
解决时间 2021-03-20 02:43
  • 提问者网友:难遇难求
  • 2021-03-19 14:15
#include
#include
typedef char (*AP)[5];
AP defy(char *p)
{
int i;
for(i=0;i<3;i++)
p[strlen(p)]='A';
return (AP)p+1;
}
void main()
{
char a[]="FROG\0SEAL\0LION\0LAMB";
puts(defy(a)[1]+2);
}
最佳答案
  • 五星知识达人网友:愁杀梦里人
  • 2021-03-19 15:39
AP是指向长度为5的数组的指针,可简单讲是属于二级指针,return (AP)p+1是语法上看起来别扭的用法,p不是二级指针,但含义被强制转成了每5个字符一组的二级数组,并且返回第二个子组,也就是说p与a一样,指向数组中最前面的'F',但返回值是指向以第5个字符‘S'开头的子组的指针,也还是二级指针(而且函数defy还把p数组的3个'\0'都改成了’A',也就是把所有子组全都用'A'连在一起了),puts(defy(a)[1]+2)在返回值defy(a)的基础上defy(a)[1]又是取第二个子组,即指向的是字符'L'开头的子组,但这回是踏踏实实的了,得到的是char[5]这样的普通含义的字符串指针,简单说defy(a)[1]就指向'L'了,后面再+2是跳过2个字符,改指向'O‘了,puts输出从'O'开始的字符串,注意因为defy做的改写,“O”和后面的“LAMP”被’A‘连在一起了。 整个很别扭的根本原因是char a[] = 这里,干脆把它改成char a[][5] = 那么是不是对LZ理解有帮助呢
全部回答
  • 1楼网友:独行浪子会拥风
  • 2021-03-19 17:13
你好! AP是一个指向char x[5]类型的数组指针,AP defy(char *p)的意思是函数返回值是char 型的5个元素的数组 希望对你有所帮助,望采纳。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯