| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 548 人关注过本帖
标题:关于指针函数的输出问题
只看楼主 加入收藏
weiweiwuha
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-9-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
关于指针函数的输出问题
程序代码:
#include<stdio.h>
char *day_name(int n)
{ char *name[]={"Illeagal Day","Monday",..."Sunday"};
return (( n<1||n>7)?name[0]:name[n]);
}
void main(void)
{ int i;
printf("Input Day No:\n");
scanf("%d",&i);
if(i<0)
exit(1);
printf("Day No:%2d-->%S\n",i,day_name(i));
}
疑问: 这段代码的作用是输出i值对应的英文星期,我的疑惑是*day_name(int n)是指针函数,子程序返回的是指向星期字符的指针,那么最后输出printf("Day No:%2d-->%S\n",i,day_name(i))时,应该是*day_name(i),为什么可以直接用%s输出day_name(i)呢? 谢谢各位了~~

搜索更多相关主题的帖子: 子程序 英文星期 include return 
2011-09-15 19:38
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
收藏
得分:20 
day_name是函数名,调用它之后能得到一个指向char型数据的指针(地址)
因此,不能用*day_name(i),而是直接调用函数day_name(i)
非要用指针的话,可以这样
#include<stdio.h>
//#include<stdlib.h>

char *day_name(int n)
{
    char *name[]={"Illeagal Day","Monday","Sunday"};
    return ((n<1||n>7)?name[0]:name[n]);                //根据n值,得到name[n]的值
}   

void main(void)
{
    char *p;
    int i;
    printf("Input Day No:\n");
    scanf("%d",&i);
    p=day_name(i);
    for(i=0;i<7;i++)                                          
    printf("%c",*(p+i));                                      //把p[i]的字符逐个输出
    printf("\n");
 }
 
2011-09-15 21:09
weiweiwuha
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-9-15
收藏
得分:0 
回复 2楼 lin471306489
也就是说*不能用于函数名前,只能用于指针变量或者数组名前?
2011-09-16 09:22
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 3楼 weiweiwuha
用%s输出指针所指地址,的值,直到遇到空格或结束符

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-09-16 09:43
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
不难理解,函数返回值是一个指向一个字符串的指针,%s是输出字符串的格式符,所以能输出一个字符串

但是有个问题,按道理说,当函数返回的时候name指针已经被释放了,它所指向的空间也应该被回收了,这样子输出会不会有意外情况发生?

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-09-16 10:00
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
应该没问题吧!函数传回的是地址

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-09-16 10:19
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
收藏
得分:0 
所以说,如果要这样实现程序功能的话,需要定义一个全局变量或是申请动态空间,虽然在这个程序里不会出现问题,但,不保证他永远不出现问题,这种编程思路就是有问题的!瞎说,一笑了之!
2011-09-16 10:23
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
回复 6楼 A13433758072
我觉得很有可能出问题,虽然说地址是没问题,那只是一个数字而已,但是这个地址对应的那个空间应该已经被回收了,难保操作系统不会分配给其他程序。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-09-16 10:28
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
楼主最好将name定义为全局变量
2011-09-16 11:02
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 8楼 waterstar
恩,是我看错了,如果在主函数对数组进行初始化,函数传递地址就没问题了!

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-09-16 11:28
快速回复:关于指针函数的输出问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011931 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved