| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 517 人关注过本帖
标题:一个关于指针函数的问题
只看楼主 加入收藏
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
一个关于指针函数的问题
有一段这样的代码:它的目的是要你输入的字符串中小写字母全部改成大写,大写字母不变。现在是可运行的程序,只是有些地方不太懂,如下。
程序代码:
#include <stdio.h>
#include <string.h>
char *fun( char tt[] )
{
    int i;
    for( i = 0 ; tt[i] ; i++)
        if ( (tt[i]>='a') && (tt[i]<='z'))
            tt[i] -= 32;
        return ( tt );
}
void main()
{
    char tt[81];
    printf(" Please enter a string:\n");
    gets( tt );
    printf(" The result string is : %s\n ",fun( tt ));
}
一开始我以为盗版书印错了,在fun函数前居然有个*号,我没加,结果怎么改都编译不了,直到到加上了这个*号才行。
我在书上找吧,根本没指针函数这块内容啊???不明白?不理解?
所以想问问指针函数什么情况下用?关于它的介绍?
搜索更多相关主题的帖子: 字母 字符串 
2011-08-09 08:17
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:1 
fun函数是返回的地址
收到的鲜花
  • ai83435122011-08-09 16:05 送鲜花  1朵  
2011-08-09 08:25
ybjkl
Rank: 2
等 级:论坛游民
帖 子:86
专家分:85
注 册:2011-6-21
收藏
得分:1 
返回的是数组名,也就是地址,所以*是必须加上的。
收到的鲜花
  • ai83435122011-08-09 16:05 送鲜花  1朵  
2011-08-09 11:02
韩54521风
Rank: 4
等 级:业余侠客
帖 子:75
专家分:212
注 册:2011-6-11
收藏
得分:4 
指针函数是指函数的返回值类型是一个指针类型,即本质是一个函数。
我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。
其定义格式如下所示:
     返回类型标识符 *函数名称(形式参数表)  
   { 函数体 }
 指针函数不同于函数指针,函数指针声明为指针,它与变量指针不同之处是,它不是指向变量,而是指向函数。函数指针有两个用途:调用函数和做函数的参数.指针函数本质就是一个函数。
例如:
char *fun( char tt[] )
{
    int i;
    for( i = 0 ; tt[i] ; i++)
        if ( (tt[i]>='a') && (tt[i]<='z'))
            tt[i] -= 32;
        return ( tt );
}
返回值的类型是一个指针类型。数组名并不是一个普通的变量,而是数组首元素的指针。就是说函数的返回值return ( tt );类型是一个指针类型
所以  printf(" The result string is : %s\n ",fun( tt ));输出了tt指针指向的地址(数组首元素),数组内的各个元素就会一次输出,知道‘\0’为止。

至于在什么情况下运用这就得看具体情况了,其实每个人运用的习惯不同,自然它出现的地方也不一样了,不过熟练运用可以给程序带来方便

收到的鲜花
  • ai83435122011-08-09 16:03 送鲜花  3朵   附言:谢谢,讲的很详细,虽然有点不懂,但还是很 ...
2011-08-09 14:38
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:4 
printf(" The result string is : %s\n ",fun( tt )) 你知道这个 %S有什么意思么? 就是后面你输出的是一个字符数组;数组是什么?就是一个一串相同类型变量的地址;所以,fun( tt ),这个就必须是地址! 而这个明显是一个函数调用;函数调用是使用它返回值; 而让他返回一个地址,那就要让他返回一个指针; 所以这么写char* fun( char tt[] ); 你应该这么看 char* || fun( char tt[] ); 意思就是 这是一个fun函数 他返回一个 char类型的指针;
收到的鲜花
  • ai83435122011-08-09 16:00 送鲜花  3朵   附言:直指我所疑惑的地方,简明扼要,谢谢

君生我未生 我生君以老
2011-08-09 15:01
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
收藏
得分:0 
回复 4楼 韩54521风
对于指针函数和函数指针我还是很多不明白,能直接用两个简单的例子说明下吗?
比如它们是不是返回值类型不同(排除无返回型)?
又或者是它们的参数类型不同?

思考不应该由他人来指导,会思考的人不需要你来提醒他去思考一个简单的问题。
2011-08-09 16:14
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
回复 6楼 ai8343512
你问这个问题我很疑惑~  函数指针指针函数 他们有区别有联系~

区别是 他们一个是函数 一个 是指针! 函数指针 是一个指针,就像我们说“好人” 对象是人,他是好的; 对于函数指针来说:意思就是 他是指针 不过是指向函数的!   对于指针函数来说:意思就是他是函数 不过返回值是指针;

联系就是 他们都和函数有关;只是一个是函数一个是指针! 只要分清楚是什么就好区别对待了;

指针函数我们好理解:就是返回一个指针嘛! 不过函数指针有的人不清楚,为什么能将指针指向一个函数!这里我要说明一下 函数他是有地址的:就像数组一样;你想调用数组,可以使用数组名或者带下标的数组:区别就是一个是指针指向数组首元素(数组名:类型是地址),一个就是单纯的调用数组元素(带下标的数组元素:类型是数组元素的类型);一个地址你说应该赋给什么类型呢?当然是指针啦! 所以说了这么多就是希望你别对函数指针有什么模糊的观念;它就是一个指针普通的指针,就和我们平时看到的 int* a;一样;a也是指针不过他指向的是整形;说到底就是指针!!!

现在来说说你说的 2个问题

比如它们是不是返回值类型不同(排除无返回型)?
又或者是它们的参数类型不同?

第一个问题: 相信你也发现了。你问的很有水平,就是返回类型不同;指针函数是函数返回指针;函数指针是指针返回什么?这个几乎没有意义!!
第二个问题:指针函数是函数可以存在参数类型;函数指针是指针~指针没有什么参数类型的!
收到的鲜花
  • ai83435122011-08-10 15:26 送鲜花  3朵   附言:很感谢,我现在终于明白了它们的区别,是我 ...

君生我未生 我生君以老
2011-08-10 14:36
快速回复:一个关于指针函数的问题
数据加载中...
 
   



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

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