| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 690 人关注过本帖, 1 人收藏
标题:被调函数 形参定义问题
只看楼主 加入收藏
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
结帖率:100%
收藏(1)
 问题点数:0 回复次数:11 
被调函数 形参定义问题
我想问一下,如果形参不定义,会怎样?下面这两个程序运行结果一样啊。
定义形参:
程序代码:
#include<stdio.h>

int max(int x,int y,int z);

void main()
{
    int a,b,c,i;
    printf("Please input three numbers:");
    scanf("%d%d%d",&a,&b,&c);
    i=max(a,b,c);
    printf("The max is %d\n",i);
}

int max(int x,int y,int z)
{
    int m=x;
    if(x<y) m=y;
    if(m<z) m=z;
    return(m);
}



不定义形参:
程序代码:
#include<stdio.h>

int max(x,y,z);

void main()
{
    int a,b,c,i;
    printf("Please input three numbers:");
    scanf("%d%d%d",&a,&b,&c);
    i=max(a,b,c);
    printf("The max is %d\n",i);
}

int max(x,y,z)
{
    int m=x;
    if(x<y) m=y;
    if(m<z) m=z;
    return(m);
}

2013-03-06 23:12
未微电子
Rank: 2
来 自:丹霞地貌
等 级:论坛游民
帖 子:47
专家分:57
注 册:2013-2-24
收藏
得分:0 
个人经典例子,楼主肯定理解:
*******************************************************
交换两个变量的值,关于形参实参是否变化的问题
#include<stdio.h>

void ff (int a, int b);

int main(void)
{
    int a = 7, b = 9;//实参

    ff (a, b);

    printf("a = %d, b = %d\n", a, b);

    return 0;
}

void ff (int x, int y )//形参
{
    int c;

    c = x;
    x = y;
    y = c;
}

//形参变,实参不变。

*******************************************
#include<stdio.h>

void ff (int *a, int *b);

int main(void)
{
    int a = 7, b = 9;//实参

    ff (&a,&b);

    printf("a = %d, b = %d\n", a, b);

    return 0;
}

void ff (int *x, int *y )//形参
{
    int c;

    c = *x;
    *x = *y;
    *y = c;
}

//用指针,形参变,实参也变
**************************************************
本质是:参数传的是值

void ff( int x, int y )
{
    int c = x;
    x = y;
    y = c;
}
int main(void)
{
    int a=7, b=9;
    ff( a, b );
    printf("a = %d, b = %d\n", a, b);

    return 0;
}
行为等同于
int main(void)
{
    int a=7, b=9;
    {
        int x=a, y=b;

        int c = x;
        x = y;
        y = c;
    }
    printf("a = %d, b = %d\n", a, b);

    return 0;
}

失信于一人,才跌入凄凉的境界。
2013-03-06 23:27
luorf
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-3-6
收藏
得分:0 
有错误啊
2013-03-07 00:07
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
不定义形参是种错误的写法,当然在有些编译器上是可以通过的....形参的作用是传递实参,两个定义严格来说是要一致的...

仰望星空...........不忘初心!
2013-03-07 00:22
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
我想2楼还没有很好的理解参数吧...你的实参应该是主函数中调用的()中的参数

仰望星空...........不忘初心!
2013-03-07 00:24
cyuyan793445
Rank: 1
来 自:江门五邑大学
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-1-12
收藏
得分:0 
我也不懂参数来学习了

新手上路,各路大侠多多指教!多谢!
2013-03-07 08:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
int max(int,int ,int)
{
   return(0);
}
这样的才是不定义形参

而这样的 估计大多数编译器都无法变异吧  不知道你是咋编译成功的
程序代码:
int max(x,y,z)
{
    int m=x;
    if(x<y) m=y;
    if(m<z) m=z;
    return(m);
}



DO IT YOURSELF !
2013-03-07 08:11
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
收藏
得分:0 
会报错吧,好像,呵呵
2013-03-07 14:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用smile_line在2013-3-6 23:12:53的发言:

我想问一下,如果形参不定义,会怎样?下面这两个程序运行结果一样啊。
定义形参:#include
 
int max(int x,int y,int z);
 
void main()
{
    int a,b,c,i;
    printf("Please input three numbers:");
    scanf("%d%d%d",&a,&b,&c);
    i=max(a,b,c);
    printf("The max is %d\n",i);
}
 
int max(int x,int y,int z)
{
    int m=x;
    if(x
 
int max(x,y,z);
 
void main()
{
    int a,b,c,i;
    printf("Please input three numbers:");
    scanf("%d%d%d",&a,&b,&c);
    i=max(a,b,c);
    printf("The max is %d\n",i);
}
 
int max(x,y,z)
{
    int m=x;
    if(x

你这不叫“不定义形参”,两个版本都定义了形参,第二个只是没有声明形参的类型,在旧式(估计你崇拜K&R专学几十年前的东西)的编译器中会自作聪明地假定为int的数据类型来进行编译,所以其实是一样的。

授人以渔,不授人以鱼。
2013-03-07 22:32
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
你没有理解实参和形参的定义,你要多看看书,以及实参和形参之间的传递关系,还有就是用指针变量作形参以及引用,多看看,很实用,但是也容易弄错。以上两位版主的都是正解,好好学习,加油!

Maybe
2013-03-07 22:52
快速回复:被调函数 形参定义问题
数据加载中...
 
   



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

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