c语言关于指针数组的一个小问题

题目是:用0~6分别表示星期日至星期六,当输入其中的任意一个数字时,请输出对应的星期名。
参考答案如下:
#include<stdio.h>
void main(){
char *weekname[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int week;
printf("input week No:");
scanf("%d",&week);
if(week>=0&&week<7)
printf("week No:%d-->%s\n",week,weekname[week]); //weekname[]数组是指针数组,输出时为什么不加星号呢---> printf("week No:%d-->%s\n",week,*weekname[week]);
else
printf("input error!\n");
}
这个程序运行没有问题,但里面注释的那一行代码我有点疑问,如果是 *weekname[week] 运行时就有问题了。望高手为我说明一下啊

你好!首先你要知道指针数组的每一个元素都表示一个指针,而指针其实就是一个地址,字符串的输入输出所用的参数都是地址,比如说:
char str[20];
scanf("%s",str);
printf("%s",str);
这里的str就是一个地址,等同于你的程序中的指针数组的一个元素,而用了*后,系统将找不到字符串的首地址,从而有错。
全手打,请采纳!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-30
char *weekname[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

是定义一个指针数组,该数组每个元素是一个指向字符串常量的指针,输出时是按%s格式输出,只需提供字符串常量的首地址即可,即数组元素的值。
第2个回答  2013-08-30
字符数组,输出的时候是不需要*的,如果你加上*的话只会输出数组的第一个元素,不如sunday,这个的话,只会输出s追问

加上*没有输出s,而是调试时出现了错误需要中断调试

追答

*weekname这样的话做输出的时候输出的是

weekname[week]这个代表的是一个字符串对吧,*weekname[week]输出的应该是数组第week个字符串的第一个字符,不如说week=0;那么*weekname[week]应该输出s

*weekname这个样子的话就代表的是该数组的第一个元素,weekname就代表数组第一个元素的地址

追问

调过了,输出的的确不是s,报错

追答

printf("week No:%d-->%s\n",week,*weekname[week]);这要改下%s应该改成%c这样就不会报错了,验证过了

相似回答