栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

参数和返回值(适合初学者)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

参数和返回值(适合初学者)

函数回顾

类型名 函数名(参数列表)

{

        函数体

}

类型名实际作用就是指定函数的返回值类型,函数在主函数中的作用主要体现在其有返回值。

默认返回0表示函数代码无错误,若函数确实不需要返回值,则可用void代替类型名,旨在告诉计算机这个函数不用返回值。

形参和实参

这两个参数呢,就相当于去占座,把包放在座位上,告诉大家这里会有人,但是是谁大家是不知道的。

举个栗子:

#include
int Find_Max(int x,int y)
{
    if(x>y) return x;
    else return y;
}
int main()
{
    int m,n;  
    printf("input two numbers:");
    scanf("%d %d",&m,&n);
    printf("max = %d",Find_Max(m,n));
    return 0;
}

形参出了函数啥也不是。

传值和传址

传值就很简单了,上述栗子就是传值。

接下来介绍传址:(栗子2)

#include
void swap(int*,int*);
void swap(int* x,int* y)  
{
    printf("before: %d %dn",*x,*y);
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
    printf("after:%d %dn",*x,*y);
}
int main()
{
    int m = 3,n =4;
    printf("before: %d %dn",m,n);
    swap(&m,&n);  
    printf("after:%d %d",m,n);
}
输出:
before: 3 4
before: 3 4
after:4 3
after:4 3

相反若代码将指针去掉,则输出变为:

before:3 4

before:3 4

after:4 3

after:3 4

原因:每个函数的内部都是相互独立的,他们之间的功效只在自身函数内部适用,也就是说哪怕把m,n换为x,y也是不冲突的。(作用域不同)

但   是,若用到指针,我们看栗子2,我们向函数传递的是指向m,n的指针,对于指针呢我们知道孩子存储的是元素的地址,在计算机处理数据过程中每个数据都有一个固定的地址,我们通过对他解引用找到其中元素。我们将实参地址传递给形参地址,地址呢,一个地址只能有一个,此时实参地址直接代替了形参地址,在完成各种操作后,我们再对实参地址进行解引用,得到的就是交换后的结果(注:一遍没读明白建议读两遍,两遍没明白读三遍,很简单的,放轻松)

传数组

再次举栗子(栗子3):

#include
void Get_Array(int a[10]);

void Get_Array(int a[10])
{
    int i;
    a[9] = 1024;
    printf("Get_Array:");
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("n");
}

int main()
{
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    int i;
    printf("main:");
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("n");
    Get_Array(a);
    printf("main.2:");
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("n");
    return 0;
}

输出:main:0 1 2 3 4 5 6 7 8 9 
Get_Array:0 1 2 3 4 5 6 7 8 1024
main.2:0 1 2 3 4 5 6 7 8 1024

这与栗子2中不同,好像这里的函数内部和主函数并不是独立的。Why???

其实很好理解:我们知道编译器在引用数组结构时直接引用的并不是整个数组,而是首字符的地址,也就是说,我们完全可以将这种情况类比为栗子2,我们向形参传递的是地址,而不是数值。就是这样。

可变参数

#include

-va_list

-va_start

-va_arg

-va_end

#include
#include
int sum(int n,...)
{
    int i,sum =0 ;
    va_list vap;
    va_start(vap,n);
    for(i=0;i 

所谓可变参数就是参数未事先确定,可根据用户输入随机应变。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号