C语言函数篇(三)函数参数高级设计
在内存空间中,
1. 单位大小的数据 叫 数值 . 比如 int a; char b; ...
2. 由这些单位数据组合起来的内存, 称作 空间. 比如: 各种数组char/int a[10]; 结构体... 空间以数组为例.又分为:
2.1 字符空间
2.2 非字符空间
对于 数值 做参数有两种方法:
值传递: 只是拷贝数据副本, 不会对原有数据进行篡改. (保护数据)
地址传递:. 传递数值的地址, 目的在于对原有的数据进行修改 . (灵活使用)
对于 空间 来说, 设计参数的时候,只用地址传递. 因为值传递的副本拷贝是非常缓慢而且浪费内存空间的操作 .
再次提一下 字符空间 和 非字符空间 的区别.
内存分为字符空间和非字符空间 .
字符空间 只有一种情况,那就是 由 char 组成,能转换成字符的内存空间.
唯一表达: char buf[10] --> char *buf
非字符空间 纯粹只是记录由0 1 组成的数据,由 char int float ...
最特殊的就char 大小的数组.
假设有一个char大小的非字符空间用来保存buf,所以定义成 char buf[10] ,,,但是,这不是和 字符空间的表达形式冲突了
所以定义非字符空间 中 char 的表达形式:
unsigned char buf[10]
字符空间与非字符空间小结:
| 数据定义 | 形参设计 | |
| 字符空间(唯一) | char buf [10] | char *buf |
| 非字符空间 | unsigned char buf[10]; int buf[10]; ... | unsigned char *buf; int *buf;... -->(void *) |
空间传递:
1. 下级函数只是读取空间的内容,并不修改空间里面的数据:
const char *buf 传达的是对数据进行一种保护,数据由上层传递到下层函数只是只读,并不修改 .
2. 子函数反向修改上层空间里面的内容
2.1 字符空间
2.2 非字符空间
func(char *p){
while(*p != ){
*p = xx;
yy = *p;
p++;
}
}
int strlen( const char *str ){ //不希望改变传进来的空间,所以加上const
int len;
//1. 错误处理
if( str == NULL ){
return -;
}
//2.操作
while( *str != ){
len++;
str++;
}
return len;
}
void func( unsigned char *p, int len){ //首地址和 长度共同限制
int i;
for(i = ; i<len; i++){
//xxxxx
}
}
但是这样子存在数据匹配的问题,(略)
所以,我们在想有没有一种表达形式来表示所有非字符空间呢,于是引进了 空指针 void *
于是:
字符空间 形参特征式 char *buf
非字符空间 形参特征式 void *buf
[ 看见 char *buf 就想到这是字符空间,带结束符
看见 void *buf 就想起这是非字符空间,靠数量规定结束符 ]
void func (void *p){
//强转
unsigned char *tmp = (unsigned char *)p;
//使用
tmp[] = xx;
*(tmp+)
= xx;
}
最后 int *p 和 void *p的区别:
因为我们在传递一个单一数值的时候有值传递和地址传递
int a 的地址传递的形参就是 int *a;
但是空指针的前身 非字符空间里面也有一种指针 int *buf
所以,在参数设计的时候,
对于
unsigned char *a; int *a; float *a ...等等,表达的是非字符串的 单一数据 的地址传递
而它们升级后的空间传递 均用 void * 来中转.
C语言函数篇(三)函数参数高级设计的更多相关文章
- 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项
博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...
- sybase下convert函数第三个参数(时间格式)
convert(varchar(10),字段名,转换格式) 比如:1.select user_id,convert(varchar(10),dayts,11) as dates from tb_use ...
- python函数知识三 函数名的使用、格式化、递归
12.函数名的使用 函数是第一类对象 函数名可以当做值被赋值给变量 def func(): print(1) return a = func print(func) print(a) a() 函数名可 ...
- SQl Server 函数篇 数学函数,字符串函数,转换函数,时间日期函数
数据库中的函数和c#中的函数很相似 按顺序来, 这里价格特别的 print 可以再消息栏里打印东西 数学函数 ceiling() 取上限 不在乎小数点后面有多大,直接忽略 floor() ...
- SQl Server 函数篇 聚合函数
说一下数据库中的聚合函数 函数使用必须加小括号(), 5种聚合函数: 1.max最大值 select max(price) from car where code='c024' --取这一列中 ...
- C语言函数篇(二)函数参数基础设计
形参实现一种数据传入的接口 ,由 实参 拷贝给 形参. 拷贝!!!!!!!!!!! 例1: void func(int tmp){ //意图是实现传进来的参数 +1 tmp++; } int mian ...
- Socket编程(C语言实现):socket()函数英文翻译
最近开始研究使用Socket API来网络编程,想着把自己的感想.感悟写下来.我发现在编程之外还有不少概念性的东西要学习.我觉得应该有以下几点吧: 1.得了解下计算机网络的基本概念,如OSI的7层模型 ...
- JavaScript面向对象编程指南(三) 函数
第3章 函数 3.1 什么是函数 函数:本质是一种代码的分组形式.函数的声明如下: <script type="text/javascript"> /*函数的声明组成: ...
- python开发第四篇:函数(1)
函数 阅读目录 一 函数知识体系 二 函数基础 三 函数对象.函数嵌套.名称空间与作用域.装饰器 四 迭代器.生成器.面向过程编程 五 三元表达式.列表推导式.生成器表达式.递归.匿名函数.内置函数 ...
随机推荐
- JavaScript new 操作符 OOP(一)
什么是对象 对象是单个实物的抽象,通常需要一个模板,表示某一类实物的共同特征,然后对象根据这个模板生成. 对象是一个容器,封装了属性(property)和方法(method),属性是对象的状态, ...
- SQL Stored Procedure and Function
Anything can be programmable with defined syntax and common lib. )) -- Add the parameters for the st ...
- Shader学习笔记整理
1.常用矩阵 UNITY_MATRIX_V 视口矩阵 UNITY_MATRIX_P 投影矩阵 UNITY_MATRIX_MV 模型矩阵 * 视口矩阵 UNITY_MATRIX_MVP 模型矩阵 * 视 ...
- Struts2_默认Action
配置Struts2默认跳转的Action <package name="default" namespace="/" extends="stru ...
- Linux 查看CPU、Memory等资源占用情况
linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...
- Oracle 安装教程图解
一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 官方下地址: http://www.ora ...
- Office加载项安装
出自我的个人主页 Alvin Blog 前言 Excel加载项离不开安装,Excel加载项本身安装及其简单,但这是在申请下来Office开发者账户之后,再次之前都得自行安装 线上安装 微软申请开发者账 ...
- STM32开发-MDK新建工程及配置
本人也是接触stm32没多久,之前用的MDK是5.1,现在用的是5.13,MDK5.0之前的版本(本人简称旧版)和之后的版本(本人简称新版)新建工程有很大区别.对于刚开始用学stm32的新手来说,基本 ...
- HTML?这些还不懂咋办?
1.什么是空白折叠现象?为什么要空白折叠呢? 对于我们大多数人的习惯来讲,大都喜欢利用空格或者换行来调整文章的文字结构.这样往往可以使我们可以更轻松的阅读.但是,在HTML中却不允许我们这么做,这是为 ...
- IOS 解析Json数据(NSJSONSerialization)
● 什么是JSON ● JSON是一种轻量级的数据格式,一般用于数据交互 ● 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除 外) ● JSON的格式很像OC中的字典和数组 ...