为了账号安全,请及时绑定邮箱和手机立即绑定

为什么ps=day_name(name,i); //////这样调用也对

为什么ps=day_name(name,i); //////这样调用也对

C C#
慕丝7291255 2022-07-21 15:11:07
#include <stdio.h>int main(){static char *name[]={"illegal day","monday","tuesday","wednesday","thursday","friday","staurday","sunday"};char *ps;int i;char *day_name(char *name[],int n ); /////为什么要这样声明呢???printf("input day no :\n");scanf("%d",&i);if(i<0) exit(1);ps=day_name(name,i); //////这样调用也对,为何啊??printf("day no: %d-->%s\n",i,ps);return 0;}char *day_name(char *name[],int n) ///////////{char *pp1,*pp2;pp1=*name;pp2=*(name+n); ///////这样赋值,为什么啊???return ((n<1 || n>7) ?pp1 : pp2 ); /////////////直接返回pp1,pp2也对,为什么啊?}////////////////////////////////input day no :4day no: 4-->thursdayPress any key to continue
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

首先,C语言某些编译器不支持隐式声明,也就是说在main函数后面定义的函数必须在调用他之前声明一下,声明的时候,一定要一模一样,在这个程序中这种声明方式是不规范的,不建议这么做,最好写在main函数外面。
其次,我们注意到day_name这是一个指针函数,返回的类型是是一个字符指针,而ps定义的时候也是一个字符指针,所以这么调用是对的,通俗一点说就是day_name这个指针函数执行结束后返回的字符指针存放到ps中。然后通过这个ps指针指向的地址获得的值就是函数返回的值,只不过通过指针操作了而已
第三, pp2这样赋值的想法应该是让pp2指向name数组的最后一个位置,这里name代表name数组的首地址(这个明白吧?)加多少就代表这个指针往后挪多少个位置。
最后,return返回的时候,会先把括号里面的式子都执行结束后,然后返回执行结束后的值,也就是说这里返回的一定是pp1或者pp2 ,并不是返回的一个式子

查看完整回答
反对 回复 2022-07-24
  • 1 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信