- 基本概念
- 案例1
- 案例2
- 答案
- 案例1:
- 案例2
基本概念
相信大家对形参与实参两个概念已经见多不怪了,这里我们再来加深一下印象或理解。
实参:所谓实参就是实际在内存中开辟了的空间的变量参数。
形参:指的是函数的参数,之所以叫形参,是因为只有在函数被调用的时候才会给该变量在栈中开辟空间,并将实参拷贝给形参
这里我就直接上指针了,大家搞懂了指针,一切且懂,请看如下代码
#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
答案:
10 6
6 10
原理同案例1,抓住实参和形参的关系把握在内容拷贝就OK



