C语言指针型函数问题

#include<stdio.h>
char *name(int n)
{
static char a[][10]={"Sunday","Monday","Tuesday"};
return a[n];
}
void main()
{
int x;
printf("input one number (0-2)");
scanf("%d",&x);
printf("Week No.%d is %s",x,name(x));
}
该程序是正确,但目前有两个疑问,如下:
1.static char a[][10]={"Sunday","Monday","Tuesday"};
为什么要定义成静态局部变量?即去掉static后错在什么地方
2.指针型函数的返回值是地址量,个人觉得
printf("Week No.%d is %s",x,name(x));
中name(x)表示的是一个地址,为什么可以直接输出其中的值?
不需要加"*"指针运算符么?

本人初学C语言,上面的提问中可能包含有错误,
而且是自己一个人在学习,不可能问其他的人请教
所以请解答的人能够尽量解答详尽,
谢谢了,不胜感激

1.如果去掉static的话,return a[n]返回的就是一个局部变量的地址,那么它的值可能被修改。

2.字符串就是一个指针,也就是一个地址
char *str="i love you";
printf("%s\n", str);
printf("%c\n", *str);
str表示字符串,是指针(地址)
*str表示字符串的第一个字符,也就是'i'
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-23
1.在自定义的函数中定义static变量使不必在每次调用此自定义函数的时候都重新创建变量,而可以使用第一次调用时创建好的。在程序内存分配中,静态变量和全局变量是分配在全局数据区的。
2.数组名也相当于指针,在c++种相当于指向常量的常量指针

感觉现在的C越来越向C++靠拢了,你可以看一看C++的书
第2个回答  2009-07-23
1。a[][10]是在被调函数中定义的,若不加static其在被调函数结束时会被clear。而有了static则在程序整个执行时间内都不会被clear。因为a的值要返回给主函数,所以不能在被调函数结束时clear,也就是它被声明为static的原因了。
2.这个觉得1楼的例子说得很清楚了,呵呵。
相似回答