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

详解C语言实参与形参的区别

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

详解C语言实参与形参的区别

文章目录
  • 基本概念
  • 案例1
  • 案例2
  • 答案
    • 案例1:
    • 案例2


基本概念

相信大家对形参与实参两个概念已经见多不怪了,这里我们再来加深一下印象或理解。
实参:所谓实参就是实际在内存中开辟了的空间的变量参数。
形参:指的是函数的参数,之所以叫形参,是因为只有在函数被调用的时候才会给该变量在栈中开辟空间,并将实参拷贝给形参

案例1

这里我就直接上指针了,大家搞懂了指针,一切且懂,请看如下代码

#include
#include
#include

void  func(char * buffer){
    printf("%xn",buffer);
    if(buffer){
        free(buffer);
        buffer=NULL;
    }
    return ;
}   
int main(){
    char *buf=NULL;
    printf("%xn",buf);
    buf =(char *)malloc(100);
    if(buf==NULL){
        printf("test_1n");
    }
    func(buf);
    if(buf==NULL){
        printf("test_2");
    }else{
        printf("test_3");
    }
    return 0;
}

最后程序的打印结果是什么呢?

案例2

请看如下代码

#include
#include
#include

void swap(int * a,int *b)
{
    int *temp;
    temp = a;
    a=b;
    b=temp;
    printf("%d %dn",*a,*b);
    return ;
}  
int main(){
    int a=6;
    int b=10;
    int *p,*q;
    p=&a;
    q=&b;
    swap(p,q);
    printf("%d %dn",*p,*q);
    return 0;
}

这段代码的输出结果又是多少呢?

答案 案例1:

答案:test_3
分析如下:
我们在堆上成果申请了100个字节大小的空间,malloc函数会返回申请成功的堆地址上的地址,所以肯定是不会打印test_1的,然后我们调用函数func,去释放形参buffer,这段在堆上的空间肯定是被释放了的。且buffer被置空了,但是关我们buf有什么关系,所以buf不为NULL,答案就是test_3

案例2

答案:
10 6
6 10
原理同案例1,抓住实参和形参的关系把握在内容拷贝就OK

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

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

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