| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5711 人关注过本帖
标题:指针作为函数参数时,不需要return语句返回吗?
只看楼主 加入收藏
灰小机大侠
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-9-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
指针作为函数参数时,不需要return语句返回吗?
图片附件: 游客没有浏览图片的权限,请 登录注册

这个程序为什么不需要  return 语句来返回最低分。求大神解答
搜索更多相关主题的帖子: return 
2016-09-23 19:11
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:7 
需不需要返回值,具体看函数类型。void类型不需要。你这个子函数,可以通过指针改变原函数对应变量的值。
和返回值没关系。当然,你也可以用返回值对原变量赋值来进行更改。
2016-09-23 19:28
灰小机大侠
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-9-23
收藏
得分:0 
回复 2楼 ehszt
意思就是指针作为函数参数时,可以不需要返回值的,对吧
2016-09-23 19:38
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:7 

STU*s;   //s 是个结构体指针,它保存的数据就是一个指针,
*s=a[0];  //访问到s所指向的地址,并向那个位置写入a[0].

C语言的机制就是函数传参只复制数据,并不允许函数直接访问修改到外面的数据。
现在我们假设函数内外就是你和你的同桌,不过你两之间隔了一块玻璃,不能逾越。那平时如果要做作业,你的同桌已经做好了,他也无条件愿意给你支持,但是受制于条件(玻璃)你们没办法直接交接本子
你不能直接把玻璃另一边的作业拿过来上交,但是你可以隔着玻璃抄作业啊,抄一份交上去不就行了。到这里是普通的复制
指针嘞,指针就是就是地址,就是你告诉老师你的作业做了,只不过放在了同桌的抽屉里,请老师自己去拿(别纠结你的同桌要不要交作业,现在假定这个作业只有你需要做,因为你是这个函数,老师也别纠结本子怎么跑他那的)
*s就是当你在隔着玻璃看作业的时候发现你同桌的某行作业写错了()这时候你就告诉老师,你放在同桌那的作业某行某咧写错了,该怎么怎么地。由老师去完成这个修改的动作。

楼主给出的这份参考答案就是建立在了同桌已经有了一份现成的作业了。你现在只需要把作业修改一下就行了。既然可以透过老师让老师动手修改本子,我又何必自己抄一份作业(return)上缴呢?
----------------------
当然了,具体写代码的时候,我个人还是比较倾向于用return ,而不是从外面传指针进来。因为*s很麻烦,代码长一点就会显得比较复杂。不够优雅。



φ(゜▽゜*)♪
2016-09-23 20:00
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 4楼 书生牛犊
你很幽默!
2016-09-23 20:09
灰小机大侠
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-9-23
收藏
得分:0 
回复 4楼 书生牛犊
谢谢大神
2016-09-23 20:29
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:7 
一个函数是否要带返回值和什么作为参数是没有关系的,和函数的类型有关。
2016-09-23 22:12
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
以下是引用linlulu001在2016-9-23 22:12:15的发言:

一个函数是否要带返回值和什么作为参数是没有关系的,和函数的类型有关。
谢谢版主指出。
在这里做个补充说明:我之前说“不用return 是因为老师可以替我们完成这个修改的动作了,没必要”这句话不够严谨。

第一,目前的这个参考答案给出的代码是void fun(STU[],SUT*s);这是无返回的函数,函数内部可以出现 return; 但不可以在return后面跟上任何的数据。
第二,“不用return 师可以替我们完成这个修改的动作了,没必要”的正确理解姿势应该是既然已经在函数的外面声明了那么一个SUT Min,并把它的指针复制给了SUT*s,我们是可以通过某种渠道直接修改带Min的数据的。没必要写个STU fun(STU[],STU*s)函数专门再return 结果.而这样写的话,在fun()函数使用的地方也务必做修改,需要一个指针变量来承载fun()函数的返回值。
程序代码:
#include<stdio.h>

typedef struct node{
    int s;
}STU;
int N;
void fun1(STU a[],STU*s)
{
    int i;
    *s=a[0];
    for(i=1;i<N;i++)
    if(s->s>a[i].s)*s=a[i];
    return;//这句话可有可无,主要是为了示范void函数里其实也是允许return的,这个技巧未来你写递归的时候会用得着。但注意,return 后面不允许跟任何数据

}
STU* fun2(STU a[],STU*s)//s完全不用。仅仅是依靠p指针把结果传递出去而已

{
    int i;
    STU* p=&a[0];
    for(i=1;i<N;i++)
    if(p->s>a[i].s)p=&a[i];
    return p;
}

int main()
{
    N =4;
    STU a[]={2,3,1,4};
    STU Min1={0};//个人习惯 给每个变量初始化

    fun1(a,&Min1);
   

    printf("%d\n",Min1.s);
    STU*Min2=NULL;//所有指针都尽量在声明定义的时候就初始化

    Min2=fun2(a,&Min2);
    printf("%d\n",Min2->s);
return 0;
}









[此贴子已经被作者于2016-9-23 23:36编辑过]


φ(゜▽゜*)♪
2016-09-23 23:16
快速回复:指针作为函数参数时,不需要return语句返回吗?
数据加载中...
 
   



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

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