|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是输出月份名- #include <stdio.h>
- char *getmonth( int n );
- int main()
- {
- int n;
- char *s;
- scanf("%d", &n);
- s = getmonth(n);
- if ( s==NULL ) printf("wrong input!\n");
- else printf("%s\n", s);
- return 0;
- }
- /* 你的代码将被嵌在这里 */
- char *getmonth( int n ){
-
- char *p;
- char ch[][12] = {"January", "February", "March" ,"April","May", "June", "July" ,"August" ,"September", "October", "November", "December"};
- p = ch+n-1;
- if(n<13)return p;
- else return NULL;
- }
复制代码
上面是用了函数的形式- #include <stdio.h>
- char *getmonth( int n );
- int main()
- {
- int n;
- char *s;
- scanf("%d", &n);
-
- char ch[][12] = {"January", "February", "March" ,"April","May", "June", "July" ,"August" ,"September", "October", "November", "December"};
- s = ch+n-1;
- if ( s==NULL ) printf("wrong input!\n");
- else printf("%s\n", s);
- return 0;
- }
复制代码
这里是第二种,我感觉两者没区别呀。但是第一种错了。打印不出正确的答案,求教
本帖最后由 jackz007 于 2020-3-17 00:13 编辑
函数中的所有局部变量是在调用函数的时候,才现场临时分配的,这些变量在函数运行期间会受到保护,但是,函数运行结束的时候,所有局部变量所占用的内存会被立即释放,就是说,这些内存空间不仅不再受到任何保护,而且,还会在需要的时候,随时被分配给其它变量使用。
你所说的五楼的代码能正常运行,只能说是一个侥幸或巧合,说明函数执行完后,ch[][12] 所占用的内存虽然已经被释放,但是,还没有来得及被其它变量占用而已,并不能说明它就对。
在我这里,编译、运行五楼的代码,当 n = 1 ~ 6 时,结果还算正常,但是,当 n = 7 ~12 时,就出错了,显示各种乱码,楼主不妨试试。
|
|