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.线程栈 局部变量的值类型 和 局部变量中引用类型的指针(或称引用)会被分配到该区域 ...
随机推荐
- 获取浏览器端的cookie方法
代码如下: function getCookie(key){ var cookies=document.cookie; if(cookies.length>0){ var start=cooki ...
- sklearn学习9----LDA(discriminat_analysis)
1.导入模块 http://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscrimi ...
- Node_进阶_2
第二天 一.复习: Node.js开发服务器.数据.路由.本地关心效果,交互. Node.js实际上是极客开发出的一个小玩具,不是银弹.有着别人不具备的怪异特点: 单线程.非阻塞I/O.事件驱动. 实 ...
- Codeforces 667B Coat of Anticubism
链接:传送门 题意:题目balabala说了一大堆,然而并没什么卵用,给你n个数,将这个集合分割成两部分,构成三角形的两个边,让你求补充的那个边最短是多长 思路:三角形三边具有 a + b > ...
- sort函数用法详解
用于C++中,对给定区间所有元素进行排序.头文件是#include <algorithm> sort函数进行快速排序,时间复杂度为n*log2n,比冒泡之类的要省时不少 Sort函数使用模 ...
- 六、利用frp穿透连接内网的linx系统和windows系统
服务端的配置 # frps.ini [common] bind_port = 7000 说明:防火墙放行该端口 启动:./frps -c ./frps.ini 后台启动:nohup ./frps -c ...
- sql where条件子句
where中可用的运算符: where 的执行 是从右到左: where的SQL优化:(where条件特别多的情况下,效果明显) 对于and,应该尽量把假的放到右边. 对于or,应该尽量把真的放到右边 ...
- STM32 的 printf() 函数串口重定向(HAL库标准库都适用)
1.建立工程 2.核心:添加新文件usar_fputc.c (名字随便自己命名),把文件添加到项目中去 #include "stdio.h" #include "stm3 ...
- HTTP请求和响应模式(B/S)(2)
B/S 及浏览器/客服端模式 根据发送的状态码不同,显示response的状态不同
- Android中的单位
Android中的单位 1.px 像素(pixels) VGA 480*640像素 (Video Graphics Array) QVGA 240*320像素 (Quarter VGA) HVGA 3 ...