C:模块化程序设计 以及数组
模块化:
举例:
继续细化上述模块,猜完一个数字之后,继续再猜:
再细化计算机生成数字:
数据类型前边都加入了一个const,把他声明为整形常量的原因,当你这个参数被声明为const的时候就可以起到保护参数的值不被改写。而此处在这两个函数内部不需要改写这两个参数的值,只是判断他俩对不对,所以此处假如const的好处,一旦你在这里边被改写了,被声明为const的这个变量,编译器编译的时候就会报错。所以他会起到一个保护需要不被改写的数据不被改写的这样的一个作用。
数组
但是定义的时候不允许是变量。
如果数组元素的值没有初始化,那么他的初始值同样是随机数。
没有初始化的元素自动初始化为0。
有没有更高效的初始化的方法呢?见下
初始化的方法:调用memset()函数,把内存当中的内存单元给他初始化为0。多少个单元初始化为0呢?我们用sizeof(a)计算数组a在内存当中占用的字节数,把这些字节单元里边的值都初始化为0值。高效的赋值方法:(一个数组的数值元素赋值给另外一个数组)调用memcpy()函数。把a数组元素中的值赋值给数组b元素。同样要指定a数组元素当中多少个字节的值来赋值给b。所以使用sizeof来获取数组a所占用的内存单元的字节数。
虽然二维数组表示几行几列,但是在内存中也是线性存储的。因为列数决定了偏移量是多大。
根据数组的类型,定义数组的时候要声明它的类型,根据他的数据类型是决定在内存当中每一个数组元素占多少个字节,数据类型前边再加上存储类型的话,说明是安排在静态存储区存储呢还是动态存储区存储呢,这个时候是决定的编辑器为他分配的存储区域。
首先定义一个字符型的数组,因为字符型的数组里边的每一个元素只占用一个字节。
上述代码中%p,是输出a他在内存当中占的内存单元的地址。起始地址。
\000是什么意思?这里边的000是几进制的?如果是反斜杠就表示他是转移字符,后面的三位数字代表他是一个8进制的数;上述数组每一行不是4列吗?为什么只初始化了3个8进制数呢?因为这是一个字符串,字符串后边有一个结束标志,这里边没有显示出来,所以这里边是一个字符串结束标志。字符串结束标志是一个ASCII码为0的那一个字符,他这里边没有显示。
对a[0][4]和a[1][0]赋值,这两个实际指的是同一个元素,因为这个二维数组在内存当中也是线性存储的,那么他的位置在哪里呢就是首地址加上偏移量。偏移量怎么算的呢?a[0][4]的偏移量就是0乘上他每一行的列数是4加上4等于4;a[1][0]是1乘上4加上0也是4。所以实际上他的偏移量是一样的,指向的是同一个位置。
但是a[0][4]是越界的,但是写出来是合法的,因为他不检查下边越界,所以写出来还是合法的。
以前使用的是普通变量做函数参数,现在可以向函数传递一个数组,数组做函数参数和普通变量做函数参数有什么区别呢?
普通变量做函数参数我们称他为按值传递参数,按值传参就是把一个实参的副本,拷贝一份传递给形参,形参得到的只是实参的一个副本,所以实参和形参在内存当中是占不同的存储单元的,二者是不会互相打架的。(形参值的改变不会影响实参,因为他们实参和形参在内存中占不同的存储单元,占的地址不同;就算同名也没关系,因为地址不同。)
数组做函数参数就不是按值传参了,称他为按引用传参。按引用传参就是拷贝数组的地址值,来传递给形参。(如果拷贝一个地址值给形参和把这个数组的全部的元素值拷贝一份给这个形参,哪一个效率高啊?显然传递一个地址效率高得多,你传全部的数组元素效率要低啊,所以他的设计就是为了高效起见,传一个地址值,传递一个地址值相当于我这两个小房子钥匙我多配了一把给你,你也能进去我也能进去,那你修改了我就能看见了,对我就有影响了,那实参和形参数组他是占用同一个内存单元,所以你这个形参数组的值改变了会影响到实参数组的值,这就是数组做函数参数和普通变量做函数参数的区别。)但是你说你这个形参在离开这个函数的时候被释放了,被释放了没有关系啊,我这个实参呢,我的地址还在,我还能够去访问这个修改后的这个值。
排序算法:
C:模块化程序设计 以及数组相关推荐
- 【单片机学习笔记】(6):字符串处理函数、变量的三种情况、用函数实现模块化程序设计、晶振与延时、指针
/ 字符串处理函数 / stract函数 字符串连接函数 例:printf("%s", stract(str1, str2)): strcpy(字符串或字符数组名)和strnc ...
- 函数与模块化程序设计
目录 函数的分类 标准库函数 自定义函数 函数的定义 自定义函数格式 函数调用 二分查找 函数原型与声明 变量的作用域和生存期 变量的作用域 全局变量与局部变量 变量的生存期 自动变量 静态变量 外部 ...
- c语言程序设计 赵宏,C语言程序设计(模块化程序设计I )(6页)-原创力文档...
第4章 模块化程序设计I (导学) C语言程序设计课程组 赵宏 示例:从键盘输入一个整数,判断该整数是否为素数. #include #include void main( ) { int x,i; s ...
- Julia程序设计3 数组2 排序、复制、集合运算、字典
Julia程序设计3 数组2 排序.复制.集合运算.字典 排序 排序算法 查找数组中的元素 复制数组 for语句实现数组的变换与生成 集合运算 字典 创建字典 查阅字典 查看索引 修改字典 添加.删除 ...
- Julia程序设计3 数组1 创建、初始化、属性与访问
Julia程序设计3 数组 创建数组 数组的属性 访问数组中的元素 创建数组 1.按列创建数组:如果用中括号创建数组.元素之间用逗号隔开,创建出来的数组就是列向量的形式:用中括号也可以按列创建多维数组 ...
- 函数-模块化程序设计
模块化程序设计的简单实现 -> 欢迎访问我的Github主页 #include <stdio.h>int main(int argc, char const *argv[]) {vo ...
- 【程序设计】模块化程序设计
从事程序设计工作来解决一个特定问题,一个好的开始就是确定程序要完成的主要任务. 在程序设计中,每个任务都成为一个程序模块. 我们可以将基本的复杂任务(父模块)分解为较为简单的子任务(子模块),简化的子 ...
- c语言可以利用数组处理批量数据库,C语言程序设计 利用数组处理批量数据.ppt...
C语言程序设计 利用数组处理批量数据.ppt 6. strlen函数----测字符串长度的函数 其一般形式为: strlen (字符数组) 它是测试字符串长度的函数 函数的值为字符串中的实际长度 6. ...
- c语言设计由数组,C语言程序设计_07数组.ppt
C语言程序设计_07数组 注意:%S用在SCANF()中控制输入时,输入的字符串不能含有空格或制表符.因为C语言规定,用SCANF()输入字符串是以空格或回车符作为字符串间隔符号:当%S遇到空格或制表 ...
最新文章
- 利用btrace在线监控java程序状态
- linux时钟告警,Linux记录-告警脚本
- java 写jsp_Java开发之JSP指令
- [react] 说说react diff的原理是什么
- [react] 如何给非控组件设置默认的值?
- $(document).ready()与window.onload的区别
- selenium webdriver 实现Canvas画布自动化测试
- php的list函数的使用,php list函数如何使用
- 反编译Silverlight项目
- 了解一个新技术和技术点的时候需要了解的事情
- 【主成分分析法】NLPer的断舍离(上篇)
- You have tried to change the API from what has been previously approved
- 使用数据绑定实现多窗口间的数据同步
- ArcView GIS 应用与开发技术(3)-地理要素的显示和标注
- 关于vue创建项目失败的原因
- 射频回波损耗、反射系数、电压驻波比、S参数的含义与关系
- 软件测试薪资高不高?软件测试工资水平调研公布
- 推荐几款优秀的开源博客系统
- erlang ets源码实现浅析
- vue项目-添加商品的多规格