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.线程栈 局部变量的值类型 和 局部变量中引用类型的指针(或称引用)会被分配到该区域 ...
随机推荐
- Hadoop HA 与 Federation
最近在做Hadoop上应用开发,需要和HA集成,active name node 切换不能影响应用的运行.在研究HA背景的同时,发现HA和Federation 配置中共用了nameservices 的 ...
- HDU-2844 Coins 多重背包 物品数量二进制优化
题目链接:https://cn.vjudge.net/problem/HDU-2844 题意 给你一些不同价值和一定数量n的硬币. 求用这些硬币可以组合成价值在[1 , m]之间的有多少. 思路 多重 ...
- NodeJS踩坑实录
nodejs的常用api url 主要是配置一系列和路径相关的信息 url.parse(urlString[, parseQueryString[, slashesDenoteHost]]) 将一个U ...
- vue定义对象变量并合并成新的对象
背景: 一般情况下,向后台发送数据请求会存在公共的变量,为了避免每一个相同部分的变量都重新定义,则想出以下解决方案: 例如一下:function,version,Authorization是公共请求部 ...
- 使用展开操符作替代 .apply() (prefer-spread)
在ES2015以前,你必须使用Function.prototype.apply()来调用可变函数. var args = [1, 2, 3, 4]; Math.max.apply(Math, args ...
- n&(n-1)位运算的妙用
一.n-1发生了什么 ①.二进制数n,n-1后,如果最后一位是0,将向前一位借2,2-1=1.最后一位为1.如果前一位为0,将继续向前一位借2,加上本身少掉的1.则变为1.一直遇到1.减为0. 所以 ...
- 前端通过canvas实现图片压缩
在一次的项目中,需要用户上传图片,目前市场随便一个手机拍出来的照片都是好几兆,直接上传特别占用带宽,影响用户体验,所以要求对用户上传图片进行压缩后再上传:那么前端怎么实现这个功能呢? 亲测可将4M图片 ...
- Spring配置文件中指定init-method属性的作用
bean 配置文件属性 init-method 用于在bean初始化时指定执行方法,用来替代继承 InitializingBean接口.相关链接:https://www.cnblogs.com/Joe ...
- HDU 4253 Two Famous Companies
Two Famous Companies Time Limit: 15000ms Memory Limit: 32768KB This problem will be judged on HDU. O ...
- iis解析json
一. windows XP 1. MIME设置:在IIS的站点属性的HTTP头设置里,选MIME 映射中点击”文件类型”-”新类型”,添加一个文件类型:关联扩展名:*.json内容类型(MIME):a ...