精华内容
下载资源
问答
  • C语言中实参和形参类型不匹配

    千次阅读 2021-01-08 11:32:50
    #include <stdio.h> test(char c); int main(void) { int g=1; printf("%d\n",test(g));...有这么一段代码,尽管编译器提示了错误,但是程序仍然能够正常运行 ...对于缺少被调函数的类型说明,但程序依
    #include <stdio.h>
    test(char c);
    int main(void)
    {
        int g=1;
        printf("%d\n",test(g));
    }
    test(char c)
    {
        return c+1;
    }
    

    有这么一段代码,尽管编译器提示了错误,但是程序仍然能够正常运行
    在这里插入图片描述
    对于参数类型的不匹配,有一个解释是:函数调用时,将实参的值传递给形参,系统首先会自动隐式地把实参的值的类型转换为形参的类型,然后再赋值给形参。
    对于缺少被调函数的类型说明,但程序依然能够正常运行,实际上return在被调函数没有类型说明时默认返回int类型

    展开全文
  • 例如我在使用Unity的MenuItem特性时,报了错"特性实参必须是特性形参类型的常量表达式、typeof 表达式或数组创建表达式" ​​​​​​​ ​​​​​​​ 经过几次定位,原因是因为我的字符串不是用const定义...

    说明:

           例如我在使用Unity的MenuItem特性时,报了错"特性实参必须是特性形参类型的常量表达式、typeof 表达式或数组创建表达式"

            

           

    ​​​​​​​       经过几次定位,原因是因为我的字符串不是用const定义的,对于特性来说,实参必须是常量值,而我定义的是变量;另外加readonly声明也是没有用的,原因可以参见:C#知识系列:readonly与const的区别

    public static string CustomEidorMenu = "CustomEidorMenu";
    public static readonly string CustomEidorMenu = "CustomEidorMenu";

    ​​​​​​​       经过试验下面的一行代码也是不行的,在C#中,只有"+"进行的字符串拼接字符串常量是可以在编译期间就确定的,其他的都是动态拼接

    [MenuItem($"{EditorConfig.CustomEidorMenu}/window")]

     

    所以解决方案如下,编译通过

    public const string CustomEidorMenu = "CustomEidorMenu";
    [MenuItem(EditorConfig.CustomEidorMenu + "/window")]

     

    展开全文
  • 类型模板形参

    千次阅读 2017-03-31 16:24:52
    1、 模板定义以关键字template 开始,后接模板形参表,模板形参表是用尖括号...非类型形参跟在类型说明符之后声明。类型形参跟在关键字 class 或 typename 之后定义,例如,class T 是名为 T 的类型形参,在这里 class

    1、  模板定义以关键字template 开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。模板形参表不能为空。

    2、  模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明。类型形参跟在关键字 class 或 typename 之后定义,例如,class T 是名为 T 的类型形参,在这里 class 和 typename 没有区别。

    3、  使用函数模板时,编译器会推断哪个(或哪些)模板实参绑定到模板形参。一旦编译器确定了实际的模板实参,就称它实例化了函数模板的一个实例。实质上,编译器将确定用什么类型代替每个类型形参,以及用什么值代替每个非类型形参。推导出实际模板实参后,编译器使用实参代替相应的模板形参产生编译该版本的函数。编译器承担了为我们使用的每种类型而编写函数的单调工作。

    4、  函数模板可以用与非模板函数一样的方式声明为 inline。说明符放在模板形参表之后、返回类型之前,不能放在关键字 template 之前。

    5、  类模板也是模板,因此必须以关键字 template 开头,后接模板形参表。除了模板形参表外,类模板的定义看起来与任意其他类问相似。类模板可以定义数据成员、函数成员和类型成员,也可以使用访问标号控制对成员的访问,还可以定义构造函数和析构函数等等。在类和类成员的定义中,可以使用模板形参作为类型或值的占位符,在使用类时再提供那些类型或值。

    6、  与调用函数模板形成对比,使用类模板时,必须为模板形参显式指定实参。

    7、  用作模板形参的名字不能在模板内部重用。当然,正如可以重用函数形参名字一样,模板形参的名字也能在不同模板中重用。


    8、  同一模板的声明和定义中,模板形参的名字不必相同。每个模板类型形参前面必须带上关键字 class 或 typename,每个非类型形参前面必须带上类型名字,省略关键字或类型说明符是错误的。

    9、  除了定义数据成员或函数成员之外,类还可以定义类型成员。如果要在函数模板内部使用这样的类型,必须告诉编译器我们正在使用的名字指的是一个类型。必须显式地这样做,因为编译器(以及程序的读者)不能通过检查得知,由类型形参定义的名字何时是一个类型何时是一个值。


    展开全文
  • 函数的形参列表

    千次阅读 2020-09-07 12:12:29
    返回数据类型函数名(形参列表) { 函数体 } 那么,形参列表是变量的时候,就是如同定义变量一样,如下: 返回数据类型函数名(数据类型名变量名) 如果要定义多个参数变量,定义格式如下: 返回数据类型函数名...

    函数在定义的时候,可以定义“形参列表”,用于接收参数!形参列表就是定义一系列的参数,可以是变量或函数指针。形参变量用于接收函数调用的时候,传递过来的数据。

    这里我们先讲解形参是变量的知识,后续再讲解形参是函数指针的知识。

    根据函数的定义格式如下:

    返回数据类型 函数名(形参列表)

    {

    函数体

    }

    那么,形参列表是变量的时候,就是如同定义变量一样,如下:

    返回数据类型 函数名(数据类型名 变量名)

    如果要定义多个参数变量,定义格式如下:

    返回数据类型 函数名(数据类型名 变量名1, 数据类型名 变量名2, … 数据类型名 变量名N)

    可以看到,形参列表就是定义多个变量的列表,定义情况有:

    (1) 如果不定义形参列表,函数形参可以使用void关键字修饰;

    (2) 如果只定义1个变量,可以如同定义变量一样,末尾不需要用引号“;”结束;

    (3) 如果定义多个变量,在定义不同变量之间是有逗号“,”分隔开;

    注意:虽然可以在形参列表中定义多个参数,但是,在编写程序的时候,要考虑函数模块之间的“耦合性”和“扩展性”。不要传递太多的参数。如果项目需求改动,需要修改某个参数,就会导致函数接口的改动,函数接口的改动对程序的改动很大,这种操作应该极力避免。

    当学习到结构体之后,我们可以把多个参数封装到一个结构体中,函数的参数只需要传递一个结构体变量就OK了。那么,当有数据需要改动,只需要修改结构体的定义和数据,函数的接口不需要修改,那么,函数模块之间的耦合性就降低,提高程序函数模块之间的扩展性。这就是函数模块扩展性好的一个表现形式,也是定义函数时需要思考的注意点。

    举例说明形参列表的定义如下:

    void func1(int a); //表示func1函数接收一个int类型的参数

    void func2(int a, int b, int c)//表示func2函数接收3个int类型的参数

    那么,调用函数的时候,有:

    (1) func1(8); 此时,调用func1函数,在参数中填入8这个数值,那么,就把8这个数值传递给形参变量a。等价于:

    int a = 8;

    所以,就是把8整数值赋给形参变量a;

    (2) func2(6, 7, 8); 此时,调用func2函数,在参数列表中填入6, 7, 8这个数值,那么,就会按顺序把数值6赋给形参变量a,把数值7赋给形参变量b,把数值8赋给形参变量c。等价于:

    int a = 6;

    int b = 7;

    int c = 8;

    所以,就是按顺序,把调用func2函数时的参数,设置到形参变量。

    那么,下面编写程序测试,看看怎么样使用定义函数的“形参列表”,测试代码如下:

     

    程序运行结果如下:

     

    可以看到,调用func1(10); 的时候,把实参10这个数值,传递给func1()函数的形参变量a;所以,在func1()函数中输出形参变量a的值,就是10这个数值。

    同理,func2(6, 7, 8); 函数的调用,是把实参6, 7, 8分别赋给func2()函数的形参变量 a, b, c。等效于:

    int a = 6;

    int b = 7;

    int c = 8;

    所以,func2()函数的形成变量a, b, c分别得到6, 7, 8这些数值。

    韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

    展开全文
  • 翻译说明: 原标题: When (and when not) to Use Type Parameter Constraints in Kotlin 原文地址: https://typealias.com/guides/when-to-use-type-parameter-constraints/ 原文作者: Dave Leeds 之前的Kotlin文章,...
  • 要使函数具有不定个数同类型形参,要使用到c++11中新添加的模板类型:initializer_list. 其使用类似于Vevtor模板,,可以使用size()函数求出其元素数量,也有迭代器的操作,但与vector最大的不同是,initializer...
  • const作用:const 声明的变量、(常)函数或者返回类型其主要作用就是不可改变(相当于常量),即变量值不能改变,返回值不能改变,(常)函数定义内部参数不能改变。下面依次介绍。 1.临时变量、引用参数和 const声明...
  • 形参和实参的区别

    2021-06-03 09:48:21
    最近在做题的时候被问到了形参和实参的区别,所以在这具体解释一下。 首先什么是形参?什么是实参? 形参(形式参数) 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来...
  • C++的形参

    2020-12-04 20:34:04
    形参1.非引用形参1.1 普通形参1.1.1 非const形参1.1.2 const形参1.2 指针形参1.2.1 非...特点: 不改变实参的值,传入的实参可以为相同类型变量,字面值,const类型. 输出: 结论: 非const形参,并不改变实参值。 .
  • 翻译说明: 原标题: Parameters and Arguments: An Easy Way to Remember the Difference 原文地址: https://typealias.com/guides/parameters-arguments/ 原文作者: Dave Leeds 简述(俗称扯皮): 最近在深入研究...
  • 最近在学习c++ 2.0(11/14/17)新特性,刚写上几行代码,就遇到编译器报错:C2563 在形参表中不匹配, 代码如下: // C11TEST.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <...
  • 参数:形参和实参 1.形参:用来接收调用该方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用...2.传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地...
  • C语言

    万次阅读 多人点赞 2019-12-18 23:01:50
    46.用c语言编写程序,可以编写出任何类型的程序 47.C语言允许有空函数 48.C程序书写格式,允许一行内可以写几个语句 49.C程序的语句无行号 50.C语言的每个语句的最后必须有一个分号 51.C语言本身没有输入...
  • c语言定义函数时形参定义的位置

    千次阅读 2020-04-02 12:07:50
    定义函数时,其形参类型放在函数()后面,()里只放了形参名 虽然这样最终用编译器(如gcc等)编译时是可以通过的,但是在IDE中,却会提示语法错误。 而通常我们在定义函数时,形参的定义是放在函数的()中的。 ...
  • 1. 如果希望通过函数调用修改实参...3. 在向函数传递大型对象时,为了避免复制实参以调高效率,以及使用无法复制的类类型(其复制构造函数为private的类类型)作为形参类型时, 也应该将形参定义为引用类型。但这时使用
  • Java泛型不仅允许在使用通配符形参时设定类型上限,也可以在定义类型形参时设定上限,用于表示创给该类型形参的实际类型必须是该上限类型,或是该上限类型的子类。  语法如下格式: Apple 2 实战 ...
  • 形参 实参 指针

    2020-04-26 23:43:32
    “实参变量和形参变量中的数据传递是单向的” 这也就说明如果swap函数中没有printf函数时,在调用之后,主函数去输出x,y两个值并没有交换,因为实参和形参的赋值过程只是将实参的值做了传递 自定义函数中的确做了...
  • C++ 运算符重载

    万次阅读 多人点赞 2018-12-26 21:39:21
    返回值类型 operator 运算符(形参表) {  .... } 包含被重载的运算符的表达式会被编译成对运算符函数的调用,运算符的操作数成为函数调用时的实参,运算的结果就是函数的返回值。运算符可以被多次重载。 ...
  • 步骤: 视图-属性管理器-属性-配置属性-常规-将使用Unicode字符集变为使用多字节字符集
  • 函数形参的理解

    2020-11-01 18:50:05
    一个典型函数定义包括四个部分:返回类型,函数的名字,形参列表和函数体。格式如下 int max(int a,int b) {函数体} 函数的作用 在我看来,函数的一般作用是对一定的输入产生一定的输出,当然可以没有输入;至于...
  • LPCTSTR是一个windows API数据类型。根据windows API数据类型的命名规律: 1)L——long 指针,是为了兼容Window3.1等16位扣件系统遗留下来的,在Win32中以及其他的32的扣件系统中,long 指针和near 指针及far ...
  • 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。 形参(parameter):...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    32 、字段、类型 33 查询 35 批量处理? 40 视图/虚 view 41 索引 42 存储过程 procedure 42 事务 transaction 43 触发器 trigger 46 练习 46 一、单查询练习 46 二、聚合函数练习 47 三、分组查询练习 47 四...
  • C++野指针及c++指针使用注意点

    千次阅读 多人点赞 2019-08-29 16:11:33
    因此,当形参改变会导致实参改变时,指针所指的内容是非const类型的,否则会出错。 1.改变指针内容: void swap(int *a,int *b) //交换的是*a,*b,即指针的内容,而不是指针a,b { int t; t=*a; *a=*b; *...
  • 函数指针

    千次阅读 2019-06-05 17:21:03
    与其他指针一样,函数指针也指向特定的类型。函数的类型是由返回值和参数列表决定,与函数名无关。例如: //比较两个字符串的长度 bool lenghtCompare(const string &s1, const string &s2); 函数的类型是...
  • C++之:模板元编程(二) 模板形参

    千次阅读 2016-03-16 23:16:44
    一、模板的形参 有三种类型的模板形参:类型形参,非类型形参和模板形参。 1、类型形参1.1 、类型模板形参...模板类型形参可作为类型说明符用在模板中的任何地方,与内置类型说明符或类类型说明符的使用方式完全相同
  • 1、遇到的问题 严重性 代码 说明 项目 文件 行 禁止显示状态错误 C2440 “=”: 无法从“const char [4]”转换为“char *” 2、解决方案 3、运行结果
  • 函数指针形参

    千次阅读 2019-03-22 15:16:04
    一、在介绍指针形参之前,先简要说明下两个运算符 & 和 *。 1、取址运算符 & 用来取得其操作数的地址。取址运算符的操作数必须是在内存中可寻址到。换句话说,该运算符只能用作函数或对象(例如左值),而...
  • 形参的种类及其能否改变实参

    千次阅读 2019-03-10 18:38:29
    形参的种类及其能否改变实参 函数的形参主要可分为地址和非地址,每种可再分为有无取地址符&amp;amp;。 **取地址符&amp;amp;**的作用是让函数运行时不开辟新的空间,不产生新的形参,而是根据地址直接到...
  • ![图片说明](https://img-ask.csdn.net/upload/201610/27/1477564346_752167.png) 如图,想交换两个指针,为什么swap函数的形参要加上引用?把引用去了得到的结果不能交换?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,011
精华内容 35,604
关键字:

形参类型说明表