- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析c语言的函数调用
C语言中的函数调用形式差别在形参的不同或是返回类型的不一样,下面来谈一下这些函数。
第一种也是最简单的一种:
请看下面例子:
/*该函数实现比较两个值的大小*/
#includestdio.h
#include stdlib.h
int compare(int x,int y)
{
int z;
if(x=y)
z=1;
else
z=0;
return z;
}
int main(void)
{
int x,y,z;
printf(please input the x and y!\n);
scanf(%d %d,x,y);
z=compare(x,y);
printf(%d\n,z);
return EXIT_SUCCESS;
}
这个函数知识简单比较x,y的值,将x,y传递给compare函数,而后返回z值。这里讲一下函数传递的两个规则:
函数之间的调用关系是传值调用的;
2、对于指针或是数组名传递的参数则是传址调用的,但这第一条不矛盾。具体在下面讲。
对于规则1的解释是调用程序传递的是变量或实参的一份拷贝,给被调用程序的是一份复制品,这样被调用的函数才不致于随便改动调用程序的数据(这也有例外)。
下面是例子程序:
//该函数原本是打算实现交换两个值的,结果实现不了!
#includestdio.h
#include stdlib.h
int swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
int main(void)
{
int x,y;
printf(please input the x and y!\n);
scanf(%d,%d,x,y);
swap(x,y);
printf(%d,%d\n,x,y);
return EXIT_SUCCESS;
}
试运行这个程序,你会发现,打印出来的仍是x,y的原值,调用函数没有起到任何作用,或是说程序并没有达到你所想的效果。这就印证了刚才所说的传值是实参的一份拷贝而已!
第二种是传递的参数是指针,请看下面例程:
/*该函数实现两个数交换其值*/
#includestdio.h
#include stdlib.h
int swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
int main(void)
{
int x,y;
/*定义两个指针变量指向x与y*/
int *p=x,*q=y;
printf(please input the x and y!\n);
scanf(%d,%d,x,y);
/*注意这里的调用形式,必须加上这个符号*/
swap(x,y);
printf(%d,%d\n,x,y);
return EXIT_SUCCESS;
}
这个程序时对上面程序的改进或者说是纠正,这样x,y才能交换其值。可是你也许会问这时为什么呢?仅仅改变为指针形式就可以吗?是的,让我慢慢道来:这确实是刚才所说的一份拷贝,但现在拷贝的是一份指针,就是指向x,y的指针,但是通过swap函数里的却可以间接访问在主函数里的x,y的值,所以也就可以修改主函数的值了,但这时主函数的指针值确实改变不了的,因为主函数仅仅是传递了一份拷贝,任凭swap函数这么修改这份指针,始终改不了主函数的指针。现在明白了吗?
第三种:传递的是数组名,请看下面的例程:
/*该函数实现将某一字符串中的小写改为大写字母,其余的不 变 */
#include stdio.h
#include stdlib.h
void change(char *string)
{
int i=0;
/*记住这种写法“*(string+i)”*/
while(*(string+i)!=\n)
{
if(*(string+i)=a*(string+i)=z)
*(string+i)-=32;
i+=1;
}
}
int main(void)
{
char string[1000]={Hello,my world!};
change(string);
printf(%s\n,string);
return EXIT_SUCCESS;
}
这种就和上面的第二种情况很类似,传递给change函数的是一个指向字符数组首元素的指针的拷贝,仿佛是通过传址调用的,但实际上和刚才说的,尽管传递的是指针拷贝,但还是能改变主
您可能关注的文档
- 理论力学试卷和答案10套.doc
- 立式容器支腿计算.pdf
- 立足培养应用型人才构建科学课程体系.doc
- 磷酸镍基类分子筛材料吸附性质研究.pdf
- 磷酸氢锆和其衍生物的插层研究进展.pdf
- 流程化管理及商业银行的实践.pdf
- 流类体系及文件操作.pdf
- 每个程序员都应该了解 CPU 高速缓存.pdf
- 模n剩余类环单位群U_Z_n_.pdf
- 模拟框架与边部传热.pdf
- 2025年AI大模型技术在电力系统中的应用及发展趋势报告-香港中文大学(赵俊华).docx
- 2025年温室气体核查指南-企业可持续发展的绿色基石-ICAS英格尔认证.docx
- 数字员工助力财务管理数字化转型.docx
- DeepSeek完全实用手册(1.5版本).pdf.docx
- 2025年一季度中国消费者消费意愿调查报告-立信数据-202506.docx
- 突发环境污染事件应急管理培训.docx
- 金融-银行行业专题:中国机构配置手册(2025版)之流动性与货币政策篇-“超级央行”时代.docx
- 陈立桅-高比能长循环全固态电池关键材料.docx
- 投资策略专题:从“第四消费时代”看未来消费机遇.docx
- 华为产品战略规划全景训战.docx
最近下载
- 学堂在线e时代的教与学—慕课引发的混合式教学1-5周作业答案+考试答案.docx VIP
- pep人教版四年级英语下册期末考试卷(可打印).pdf VIP
- 2023年副高(临床药学)考试真题卷.pdf VIP
- 私人订制旅行行程安排及免责.doc VIP
- 沪教版四年级下册英语期末测试卷附参考答案.pdf VIP
- 中泰化学2024环境、社会及治理(ESG)报告.docx
- 标准图集-西南18J515_室内装修.pdf VIP
- 《数据分析基础与案例实战(基于Excel软件)(第2版)》全套教学课件.pptx
- 人教版三年级英语下册期末测试卷及答案【完美版】.pdf VIP
- 基于PLC的变频器多段速调速系统设计.doc VIP
文档评论(0)