ref与out区别

ref:相当于c语言的引用参数  实参和形参一起变。

out:多用于输出参数  就是在return之前必须给out标示的参数赋值。

C语言的基本特性:

1、C是高级语言:它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

2、C是结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于编码、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

3、C语言功能齐全:具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。

4、C语言适用范围大:适合于多种操作系统,如Windows、linux、DOS、UNIX等等;也适用于多种机型。C语言对编写需要硬件进行操作的场合,优于其它高级语言,有一些大型应用软件也是用C语言编写的。

5、C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。

6、C语言文件由数据序列组成:可以构成二进制文件或文本文件常用的C语言IDE(集成开发环境)有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++,Borland C++ Builder,GNU DJGPP C++,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc,xcode(mac os x)等。

新特性

1、对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符,aligned_alloc函数以及<stdalign.h>头文件。

2、_Noreturn 函数标记,类似于 gcc 的 __attribute__((noreturn))。

3、_Generic 关键字。 

4、多线程(Multithreading)支持,包括:_Thread_local存储类型标识符,<threads.h>;头文件,里面包含了线程的创建和管理函数。 

5、增强的Unicode的支持,基于C Unicode技术报告ISO/IEC TR 19769:2004,增强了对Unicode的支持。包括为UTF-16/UTF-32编码增加了char16_t和char32_t数据类型,提供了包含unicode字符串转换函数的头文件<uchar.h>. 

6、删除了 gets() 函数,使用一个新的更安全的函数gets_s()替代。 

7、增加了边界检查函数接口,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等。 

8、增加了更多浮点处理宏。 

9、匿名结构体/联合体支持,这个在gcc早已存在,C11将其引入标准。 

10、静态断言(Static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理。 

11、新的 fopen() 模式,(“…x”),类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用。

12、新增 quick_exit() 函数作为第三种终止程序的方式。当 exit()失败时可以做最少的清理工作。

13、_Atomic类型修饰符和<stdatomic.h>头文件。

在C语言中,ref相当于c语言的引用参数,实参和形参一起变。out多用于输出参数,就是在return之前必须给out标示的参数赋值。这就是out和ref的区别。

  out与ref的区别如下:
  private void button1_Click(object sender, EventArgs e)
  {
  //ref,out都能修改传进来的参数的值。
  int refInt = 100;
  RefValue(ref refInt);
  MessageBox.Show(refInt.ToString());
  //
  int outInt = 100;
  outValue(out outInt, 100);
  MessageBox.Show(outInt.ToString());
  }
  //ref
  public void RefValue(ref int refInt)
  {
  refInt += 100;//ref引用不需要初始化
  }
  //一个函数可以有多个ref参数
  public void RefValue(ref int refInt,ref int rInt)
  {
  refInt += 100;//ref引用不需要初始化
  }
  //out
  public void outValue(out int outInt, int i)
  {
  outInt = i + 100;//out引用必须初始化
  }
  /*函数不可以有多个out参数
  public void outValue(out int outInt, out oInt,int i)
  {
  outInt = i + 100;//out引用必须初始化
  }*/还是以例子来说明吧;
1. ref:
int i =0;
有函数fun(ref i)和fun(i)
它们的函数体都是{ i = 3;},那么在执行以下两段代码后:
(1)int i = 0; fun(i); System.Console.WriteLine(i.ToString());
(2)int i = 0; fun(ref i); System.Console.WriteLine(i.ToString());
(1)的输出是1,(2)的输出是3,

2. out:
int i; //注意,这里只是声明了变量i,并没有对其初始化
有函数fun(ref i)、fun(out i)和fun(i)
它们的函数体都是{ i = 3;},那么在执行以下三段代码后:
(1)int i = 0; fun(i); System.Console.WriteLine(i.ToString());
(2)int i = 0; fun(ref i); System.Console.WriteLine(i.ToString());
(3)int i = 0; fun(out i); System.Console.WriteLine(i.ToString());
(1)和(2)在编译的时候都会报错:错误 CS0165: 使用了未赋值的局部变量“i”
而(3)能正常编译,而且输出3

最后总结一下:
Ref和Out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。稍有不同之处是:
使用Ref型参数时,传入的参数必须先被初始化。而Out则不需要,对Out而言,就必须在方法中对其完成初始化。
使用Ref和Out时都必须注意,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
Out更适合用在需要Return多个返回值的地方,而Ref则用在需要被调用的方法修改调用者的引用的时候。
打印机加墨粉步骤图解 ubuntu fbterm配置 第二块硬盘 mbr gpt 2018年奔驰gle换代图片 印度ems官网查询 福建先创电子 北京 f.t. island 日文歌 warframe音妈是谁 sql server 2000版本 水彩颜料樱花和吴竹 oba系列番号列表 igepir是干什么的 sugar honey dior 湛江晚报电子版官网 魔趣rom刷机教程 有带木和土五行的字 拉菲庄园干红2008 yinpianwang 宁波东方热线 lb培养基的配方 weblogic配置向导 hot gv 父与女乱日b小说 less than zero虐妮妮 神犬奇兵完整版爱奇艺 优佳成长学籍采集系统 韩美林瓷器作品图片 世界市场最终形成时间 孟赛尔颜色体系白色 真相只有一个日语谐音

Copyright 生活吧 Some Rights Reserved

如反馈或投诉等情况联系:une35498#163.com