#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 ,并不是返回的一個式子
- 1 回答
- 0 關注
- 119 瀏覽
添加回答
舉報
0/150
提交
取消