1.2 C语言--函数与数组
- 函数
- 函数的定义
返回值类型函数名(类型形参名[,……]){
函数体
}
- 除了没有访问修饰符外,基本等同于java的函数。
- 良好的程序设计风格要求即使没有返回值,也要使用return;作为最后一条语句,表示函数结束,但没有返回值。
- 自动变量
- 自动变量
- auto 类型名变量名;
- 自动变量也称为动态局部变量,随着函数的加载而加载。因此函数中不同的变量能实现重名。
- 因为自动变量使用最多,因此可以省略。
- 传给函数形参的是函数实参的一个副本,这就是按值传递,所以实参的值是不能在被调用的函数中修改的。
- 静态变量
- 自动变量
static 类型名变量名;
- 自动变量在定义时不会被自动初始化,在退出函数时立即释放内存。
- 静态变量的声明周期是:整个程序运行期间。静态全局变量可以被整个程序访问,静态局部变量只能被方法访问。
- 外部变量
- 外部变量
extern 类型名变量名;
- 在所有函数之外定义。作用域是从定义点到本文件的末尾。
- 寄存器变量
- 寄存器变量
register 类型名变量名;
- 就是把经常访问的数据放到CPU的寄存器中。通常不用的,程序也会自动优化。
- 函数原型
- 因为C语言本质上是从头到尾执行的。函数的定义如果在调用的前面,是无法的使用的。如果函数的定义在调用之后,就必须使用函数原型在预编译时进行声明。告知编译器。
- 怎么做
在文件头部,添加如下命令:
返回值类型函数名(参数列表);
- 函数的设计原则
- 基本设计原则
- 函数行数不能超过50行。
- 行数功能单一,高内聚
- 函数只能有一个入口,一个出口。尽量少的使用全局变量
- 函数的入口处应该对参数的有效性进行检查
- 不能认为一个函数总是成功的,要考虑到调用失败的情况
- 使用return;无论有无返回值
- 在执行敏感操作时:比如除法,开方等要进行操作数和类型检查,防止出现除零,数据溢出,类型转换等问题。
- 某个功能重复超过三遍就应该写成函数。
- 模块化的程序设计
- 要高内聚,低耦合
- 自定而下,逐步求精
- 自定而下
- 先写出结构简单,层次清晰的主程序来表达整个问题
- 逐步求精
- 对子问题进行高级语言的实现
- 程序注释
- 不写做什么,而写想做什么,如何做。
- 基本的功能,作者,开发日期,版本号要加
- 入口参数和出口参数要详细的说明
- 数组
- 一元数组
- 数组的定义与初始化
- 数组:具有相同类型变量的集合
- int score[5]; // int表示数组的基本类型;5这个下标表示维度;C语言中的下标都是从0开始的。
- 为了方式数组长度的不断该表,通常我们会将数组长度定义为常量或者宏
#define SIZE 5
int score[SIZE];
- 数组的初始化
int score[]={1,2,3,4}; // 定义了一个长度为4的数组,并初始化。
int score[4]; // 定义了一个长度为4的数组,并将数组的各个值初始为0.
- 数组的访问
- 数组访问越界:在C中没有OutOfBoundary的错误,越界访问会导致正常的程序也出现问题。
- 二维数组的定义与初始化
- 定义与初始化
int score[3][4]; // 定义了一个三行,四列的数组,且数组中所有的元素初始化为0.
int score[][3]={1,2,3,4,5} // 定义了一个2行3列的数组。且第二行没有数据的地方被初始化为零。
数组的第二维长度的声明永远不能改变。因为C中的数组是连续的空间按行分配的。数组实际上只是代表第一个元素的地址值。
- 向函数传递数组
- 向函数传递数组实际上就是传递的数组的地址值(并且传送的是首地址)。按值传递,传递副本的话会耗费很大的资源,按地址传递提高效率。
转载于:https://www.cnblogs.com/yanghuabin/p/9761068.html
1.2 C语言--函数与数组相关推荐
- 关于C语言函数返回数组的问题【转】
(转自:https://blog.csdn.net/earbao/article/details/53401800) 关于C语言函数返回一个数组 c语言中函数不能直接返回一个数组,但是可以用其他方式实 ...
- c语言--函数指针数组
c语言–函数指针数组 1.指针数组的概念 本质是数组,数组的每一个元素是一个指针变量: 2.指针数组的定义方法 类型说明符 *数组名[元素个数] void test() {int a=10,b=20, ...
- c语言在函数中返回数组,关于C语言函数返回数组的问题
关于C语言函数返回一个数组 c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意: 1.该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放. 可以是全局 ...
- c 语言 函数返回数组_如何在C ++函数中返回数组
c 语言 函数返回数组 介绍 (Introduction) In this tutorial, we are going to understand how we can return an arra ...
- c语言函数输出数组,如何让C语言函数返回一个二维数组
为了让C语言函数返回一个二维数组,有些人这样定义函数: int **foo(int rows, int columns) 然后在函数中费劲心机拼出来一个这样的malloc语句: int (*resul ...
- C语言 函数返回数组和指针区别
1.示例代码 #include <stdio.h>char * str1() {char A[] = "Hello!";return A; } char * str2( ...
- C语言——函数和数组的简单介绍
本人声明:小编是一个刚学c语言不久的小白,想要写博客来加深对知识的理解,如果有写得不对或者不好的地方请各位大佬多多指教! 目录 (1)函数的概念 (2)函数的定义 (3)函数的调用 (4)使用函数和不 ...
- 关于C语言函数返回数组问题
现象 int *test_fun2() {int array[10] = { 0 };int i = 0;for (i = 0; i < 10; i++){array[i] = 8;}retur ...
- c语言函数返回数组_C语言如何用一维数组拷贝函数,拷贝二位数组(C Primer Plus 10-7)...
程序内容: 初始化一个double类型的二维数组,使用编程练习2中的一个拷贝函数把该数组中的数据拷贝至另一个二维数组. 程序为C Primer Plus第十章第七题的答案示例 附:程序代码为本人亲自编 ...
最新文章
- Ubuntu安装TensorFlow-gpu及cuda9.0(不给自己找麻烦)
- Android Intent解析
- java多张图片上传安卓,Android Rxjava+Retrofit2 多图片+文字上传
- 推荐文章:机器学习:“一文读懂机器学习,大数据/自然语言处理/算法全有了...
- java值传递和引用传递_辨析Java方法参数中的值传递和引用传递
- 如何让nodejs在linux后台运行
- linux内存和缓冲区,Linux上怎么清除缓存、缓冲区和交换区空间?
- 五分钟商学院(基础---商业篇)
- ubuntu18.04搜狗收入法失效
- mac mysql 1055_Mysql 错误“1055”
- 什么录音软件可以录制电影对白
- 阿里旺旺自动回复工具开发一
- ReleaseDC、DeleteDC(买二送一DeleteObject)简单解析
- 64位Windows7系统中Svchost占用内存跟CPU过高的问题解决办法
- cad.net GeometricExtents出错了 调试看不到文字
- 双向dc-dc变换器原理
- 图像格式-RAW、RGB、YUV
- 【愚公系列】2023年05月 网络安全高级班 037.WEB渗透与安全(攻防实验室与靶机说明)
- 华三交换机升级的ipe文件_H3C设备升级
- 你真的需要文档管理软件吗?