网站设计要素 优帮云/模板建站的网站
文章目录
- 基本概念
- 案例1
- 案例2
- 答案
- 案例1:
- 案例2
基本概念
相信大家对形参与实参两个概念已经见多不怪了,这里我们再来加深一下印象或理解。
实参
:所谓实参就是实际在内存中开辟了的空间的变量参数。
形参
:指的是函数的参数,之所以叫形参,是因为只有在函数被调用的时候才会给该变量在栈
中开辟空间,并将实参拷贝给形参
案例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