基本概念
相信大家对形参与实参两个概念已经见多不怪了,这里我们再来加深一下印象或理解。
实参
:所谓实参就是实际在内存中开辟了的空间的变量参数。
形参
:指的是函数的参数,之所以叫形参,是因为只有在函数被调用的时候才会给该变量在栈
中开辟空间,并将实参拷贝给形参
案例1
这里我就直接上指针了,大家搞懂了指针,一切且懂,请看如下代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void func(char * buffer){
printf("%x\n",buffer);
if(buffer){
free(buffer);
buffer=NULL;
}
return ;
}
int main(){
char *buf=NULL;
printf("%x\n",buf);
buf =(char *)malloc(100);
if(buf==NULL){
printf("test_1\n");
}
func(buf);
if(buf==NULL){
printf("test_2");
}else{
printf("test_3");
}
return 0;
}
最后程序的打印结果是什么呢?
案例2
请看如下代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void swap(int * a,int *b)
{
int *temp;
temp = a;
a=b;
b=temp;
printf("%d %d\n",*a,*b);
return ;
}
int main(){
int a=6;
int b=10;
int *p,*q;
p=&a;
q=&b;
swap(p,q);
printf("%d %d\n",*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
版权声明:本文为m0_56145255原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。