C语言传参的类型匹配
有一个这样的问题:
- 形参const char *p和实参char *c可以匹配
- 形参const char**p和实参char**c不可以匹配
注:argument和parameter:严格而言,parameter指形参,argument指实参
ANSI C:
"每个实参都应该有一个类型,以便将其值赋给一个对象,这个对象具有相对应形参的类型的非限定版本"
含义:传参相当于赋值,函数的形参将具有实参的非限定版本的数据,具体形参是否有限定类型有怎样的限定类型由函数的形参列表指定,实参只负责传值
"赋值操作应满足下列之一:
...
两个操作数都是指针,分别指向两个相匹配的类型的限定或非限定版本,而且左操作数指向的类型必须有右操作数指向类型的所有限定符
..."
含义:ANSI C定义了几种有效的赋值方式,上面描述了指针向赋值的情况。右操作数有的限定符左操作数也一定要有
解释:
"const float*"不是限定类型而是非限定类型,类型为指向限定类型的指针
所以"const char**"是一个指向 指向限定类型的指针,是指向非限定类型的指针
"const char**"和"char**"都是指向非限定类型的指针,但是是不同的非限定类型
虽然他们两个指向的非限定类型本身可以作为类型进行匹配,但是这两个非限定类型的指针不能匹配,因为类型的解析不会递归的进行
const:
const的含义只是意味着这个标识符不能被用来执行赋值操作,但是如果是指针(const type * p)的话,就是不能对*p执行赋值操作
所以const修饰的并不是常量,不能用在如结构体元素的大小相关声明,某些编译器的数组声明,case的表达式
这只会使值通过这个标识符是只读的,但是可能会被其他的方式修改
最常用的地方是函数的形参,因为函数只能通过参数名获取到这个值,所以至少在这个函数中是不会被修改的
C语言传参的类型匹配的更多相关文章
- Python接口自动化——soap协议传参的类型是ns0类型的要创建工厂方法纪要
1:在Python接口自动化中,对于soap协议的xml的请求我们可以使用Suds Client来实现,其soap协议传参的类型基本上是有2种: 第一种是传参,不需要再创建啥, 第二种就是ns0类型的 ...
- springboot前端传参date类型后台处理方式
转载:https://blog.csdn.net/xiangluer/article/details/81913137?utm_source=copy 参考如下博客: https://www.jian ...
- winform下调用webservice,传参List<string>
用c#做了一个webservice,其中一个接口是public bool AddReturns(List<string> SQLStringList). 然后在另一个c#做的winform ...
- Java自学-类和对象 传参
Java中的传参 变量有两种类型 基本类型 和类类型 参数也是变量,所以传参分为 基本类型传参 类类型传参 步骤 1 : 基本类型传参 基本类型传参 在方法内,无法修改方法外的基本类型参数 publi ...
- 枚举|标志枚举+|(或)和&(与)运算|类型转换|值类型和引用类型|传参|异常|垃圾回收
枚举部分 enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型. 通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它. 但是,还可以 ...
- 脚本语言丨Batch入门教程第四章:调用与传参
今天是Batch入门教程的最后一章内容:调用与传参.相信通过前面的学习,大家已经掌握了Windows Batch有关的基础知识和编程方法,以及利用Windows Batch建立初级的编程思维方式.今后 ...
- Go语言的传参和传引用[转]
目录[-] 传参和传引用的问题 传slice不是传引用! 什么叫传引用? 为什么传slice不是传引用? 为什么很多人误以为slice是传引用呢? 传指针和传引用是等价的吗? 所有类型的函数参数都是传 ...
- C语言 指针在函数传参中的使用
int add(int a, int b) //函数传参的时候使用了int整型数据,本身是数值类型.实际调用该函数时,实参将自己拷贝一份,并将拷贝传递给形参进行运算.实参自己实际是不参与运算的.所 ...
- .NET 内存基础(通过内存体验类型、传参、及装箱拆箱)
该随笔受启发于<CLR Via C#(第三版)>第四章4.4运行时的相互联系 一.内存分配的几个区域 1.线程栈 局部变量的值类型 和 局部变量中引用类型的指针(或称引用)会被分配到该区域 ...
随机推荐
- TF基础2
1.常用API 1.图,操作和张量 tf.Graph,tf.Operation,tf.Tensor 2.可视化 TensorBoard 3.变量作用域 在TF中有两个作用域(scope),一个是nam ...
- 纯css实现宽度自适应,高度与宽度成比例
html: <div></div> css div{ width: 33.33%; box-sizing: border-box; float: left; position: ...
- Pyhton学习——Day40
#一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:# 核心(ECMAScript)# 文档对象模型(DOM) Document object model (整合js,css,ht ...
- POJ 3370 Halloween treats( 鸽巢原理简单题 )
链接:传送门 题意:万圣节到了,有 c 个小朋友向 n 个住户要糖果,根据以往的经验,第i个住户会给他们a[ i ]颗糖果,但是为了和谐起见,小朋友们决定要来的糖果要能平分,所以他们只会选择一部分住户 ...
- IDEA快速搭建 SpringCloud 注册中心与
第一步:创建 注册中心(eureka)项目 按照以下步骤一步一步来(只是对于IDEA的初学者来说) (我这里选择maven项目.比较方便) 给注册中心项目 取上可爱的名称 第二步配置 eureka的p ...
- vue无缝滚动的插件开发填坑分享
写插件的初衷 1.项目经常需要无缝滚动效果,当时写jq的时候用用msClass这个老插件,相对不上很好用. 2.后来转向vue在vue-awesome没有找到好的无缝滚动插件,除了配置swiper可以 ...
- oracle截取某一个字符之前或之后的值;substr();instr()
函数介绍: 截取的函数: substr(?,?); substr(?,?,?); 获取目标字符出现的位置: instr(? , ? , ? ); instr( ? , ? , ? , ? ) 例: 字 ...
- Expressjs配置加载器
有些东西就是操刀开干,没什么好解释的.... 问题引入 解决问题 直接上码 env.js index.js 使用方法 初始化 使用方法 写在最后 问题引入 大家都知道在日常的研发过程中,我们的程序会有 ...
- Vue PC端框架
Vue PC端框架 1. Element 中文文档:http://element-cn.eleme.io/#/zh-CN github地址:https://github.com/ElemeFE/ele ...
- ASP.NET-常用正则表达式
常用正则表达式 正则: [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}", ErrorMes ...