C语言函数的结构是固定的在我之前的文章里介绍过,C语言作为编程语言,是一种形式语言,具有固定的格式结构和符号:返回值类型函数名(参数列表){语句列表}注意函数名在相应可见域内要保持唯一性,例如,在main函数所在文件里定义的函数名不能也为main 。
C语言,自定义函数要注意些什么?
C语言中自定义函数一个最常见的注意点就是区分“值传递”和“址传递”了 。“值传递”和“址传递”就一个字不一样,而且发音还非常的接近,但就是天壤之别 。许多初学C语言的小伙伴经常搞不清通过函数传递一个数据值和传递一个地址,以至于C程序的运行结果大相径庭 。本回答就来详细讲解下C语言中“址传递”和“值传递”的区别 。
一、值传递和址传递的C程序代码为了说清“值传递”和“址传递”之间的区别,我们先看一段C程序代码,如下:上述C程序代码非常简单:在C程序的main函数中定义了两个整型变量para1与para2,初始值分别是1和2;还有一个指针变量pInt,初始值是变量para2的地址 。在C程序的main函数中,先调用了自定义函数ValueTrans,并且把变量para1作为参数 。
在自定义函数ValueTrans中,将变量para1重新赋值为11 。在调用完函数ValueTrans后输出变量para1的值,看看是多少;在C程序的main函数中,再次调用了自定义函数AddrTrans,并且把指针pInt作为参数 。在自定义函数AddrTrans中,将指针pInt指向的值重新赋值为22 。
在调用完函数AddrTrans后输出变量para2的值,看看是多少;现在我们看看这段C程序的运行结果:惊不惊喜?意不意外?二、值传递和址传递的解释现在我们来解释下上述C程序代码为何是这么个运行结果 。1、值传递上述C程序代码调用函数ValueTrans,把变量para1作为参数,注意就是把变量para1的值1作为参数 。
在具体执行函数ValueTrans时,系统自己默默地、悄悄地在某一个地方新建了一个也叫作para1的整型变量 。这个整型变量para1可不是C程序代码main函数中的那个para1.我们可以把main函数中的para1变量看做是main_para1,把函数ValueTrans中的para1看做是ValueTrans_para1.那么在函数ValueTrans中其实是把11赋值给了变量ValueTrans_para1,至于变量main_para1嘛,纹丝不动!所以在C程序main函数中,最后变量para1的值还是1.2、址传递上述C程序代码调用函数AddrTrans,把指针pInt作为参数,注意此时就是把变量para2的地址作为参数,这就有意思啦!在具体执行函数AddrTrans时,系统自己同样地、悄悄地在某一个地方新建了一个也叫作pInt的指针变量 。
但是这个指针变量pInt的值就是main函数中的那个pInt的值.换句话说,两个指针变量pInt同时指向了C程序中main函数的变量para2 。那么在函数AddrTrans中把22赋值给了指针pInt指向的值,其实也就改变了main函数中的变量para2的值,太神奇了!这就是C语言指针的魅力所在!所以在C程序main函数中,最后变量para2的值就变成了22.上述是C语言编程中自定义函数时要注意的一个地方 。
编写C语言程序经常要用很多函数,怎样定义自己的函数?为什么要定义函数,不麻烦吗?
在C语言程序开发中,我们常常使用一些库函数(例如 printf,sin 等函数) 。事实上,实际需求通常是非常复杂的,只依靠现有的函数很难完成 。这就需要自己定义 C语言函数 。可以把一个函数看作是一块积木,各种各样的积木才能堆积成复杂的建筑 。只有几种积木,能完成的建筑太有限了,如果能够自己造各种各样的积木,再复杂的建筑也能完成 。
推荐阅读
- 如何将两张图片合成一张,图片合成软件
- 移动有什么样的套餐最便宜 如何挑选最适合的套餐
- 移动目前最划算的套餐怎么办理 如何挑选合适的套餐
- 晶锐1.4自动档油耗如何省油
- 新桑塔纳1.4如何
- 骐达雨刮如何换
- 汽车上的雨刮器最长能用多久?平时如何保养雨刮片?
- 微信支持自定义来电铃声 适合设为来电铃声的歌曲
- 联想旭日c466m,联想旭日C466M 主题笔记本性能如何?
- 三星i739,三星 sch-i739 性能如何, 玩天天跑酷 和节奏大师 之类的卡不卡?