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

#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 :
4
day no: 4-->thursday
Press any key to continue

慕丝7291255
浏览 95回答 1
1回答

UYOU

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