1. c# ref和out区别仅仅是参数需不需要初始化
ref和out使用时的区别是:
①:ref指定的参数在函数调用时候必须初始化,不能为空的引用。而out指定的参数在函数调用时候可以不初始化;
②:out指定的参数在进入函数时会清空自己,必须在函数内部赋初值。而ref指定的参数不需要。
一:ref 关键字使参数按引用传递。
其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
也即是说,在方法中对参数的设置和改变将会直接影响函数调用之处(代码①及②)。无论是函数的定义还是调用时均不可忽略关键字ref.
二:ref定义的参数在使用前必须初始化,无论在函数定义时候参数有没有赋予初值。这条正好区分out指定的参数可以不在调用函数的时候进行初始化。
三 :对out来说,第一条同样适用。将代码①以及②中的ref全部修改成out,则可与使用ref得到同样的结果。
四:out指定的参数必须在函数定义的时候就赋初值。否则则出现错误。对比ref指定的参数则可以不在函数内部进行赋初值,在函数调用时候再赋初值也可以。
2. C语言变量必须初始化吗
C语言变量可以不初始化。直接定义int
a;
printf("%d",&a);这两句程序是直接定义并且输出变量的值,这个要看编译器了,有的编译会输出0,这是编译器帮你初始化了,默认初始化为0。如果有的编译器不初始化的话会报错,即使不报错,那么printf输出的数字是随机的,是这个内存中之前存储的数据。
3. java局部变量初始化,String类型为什么不用初始化就能使用
局部变量String需要初始化!
以下代码:
public class Test {
public static void main(String[] args) {
String s;
System.out.println(s);
}
}
这个代码直接报错,无法编译
你上面的代码没错是因为你在while循环里对s进行了初始化
4. java类变量不初始化输出为什么出错
你给出的代码中的main 方法是 public void main(String [] args)还是 public static void main(String [] args)?
1,如果声明的变量在 public static void main(String [] args) 方法中,那么变量必须是 static ,否则编译出错,静态方法内不能有非静态变量
2,另外,如果 变量 在 public static void main(String [] args) 方法中声明,必须进行初始化,否则会出现编译错误
5. 在java中变量一定要初始化吗
变量定义可以不被初始化,但是这个变量做为局部的变量的话就必须被初始化,否则会编译出错。所谓局部变量就是在一个函数或着代码块中定义的变量。我想你定义的变量也是这样了。
6. C语言中:静态变量是不是可以不需要初始化
可以,但是如果没有初始化,则静态变量的内存在编译时会自动清零。
7. Java:为什么这两段代码里的变量i有的需要初始化有的不需要呢
对于类的成员变量,不管程序有没有显式的进行初始化,Java虚拟机都会先自动给它初始化为默认值。
局部变量声明之后,Java虚拟机就不会自动给它初始化为默认值,因此局部变量的使用必须先经过显式的初始化。
但是需要声明的是:对于只负责接收一个表达式的值的局部变量可以不初始化,参与运算和直接输出等其它情况的局部变量需要初始化。
你第一种情况为 成员变量系统自动初始化为 0 了
8. C语言:数组没初始化也没赋值,编译系统是否能给没赋值的元素自动(数值型)赋0值或(字符型)赋'\0'值。
不会。利用下面这个程序测试一下就知道了:
#include <stdio.h>
#define Times 40
void main()
{
long x[Times];
int a;
// 测试系统会不会自动为数组赋值
for(a=0;a<Times;a++)
{
printf("第%2d个月:%d\n", a+1, x[a]);
if ((a!=0) && (a%10 == 0))
printf("\n");
}
// 求值
x[0] = 1;
x[1] = 1;
for(a=2;a<Times;a++)
x[a]=x[a-1]+x[a-2];
// 输出结果
for(a=0;a<Times;a++)
{
printf("第%2d个月:%d\n", a+1, x[a]);
if ((a!=0) && (a%10 == 0))
printf("\n");
}
}
9. 为什么全局变量无须初始化,局部变量必须初始化
这个说法本身就不对。变量需要不需要初始化是根据需要来进行的。全局变量有时也需要初始化,而局部变量其实大部分时间都没有初始化。不要把赋初值与初始化混淆了:初始化是由编译器做的,形成可执行文件后,那些变量的值就在软件文件中放着,执行程序时直接使用了;而赋初值是由C/C++代码实现的,程序开始执行后才给变量赋的值。只是全局变量如果不显式初始化,那么编译时由编译器自动初始化为0,而编译器对局部变量是否有值视而不见,所以在程序开始执行前局部变量的“值”是机器垃圾。因此,局部变量在获得初值前若当右值使用就要出问题!局部变量获得初值有两个途径:一是初始化,如int x=3;就是在声明x的类型时同时初始化为3——x==3这个值在编译时就被编译器确定了,程序启动后不再执行int x=3;这种操作;二是赋初值,如int x;x=3;,int x;在编译时执行,只声明了变量类型,值是垃圾,x=3;是C/C++语句,每次启动程序都要执行,将变量x赋值为3。所以,说“局部变量其实大部分时间都没有初始化”,就是指我们创建函数时往往只写int a,b,c,x,y,z;而并不给每个变量都初始化一个确定的值,而是在使用前给它们赋初值,如紧接着写scanf("%d%d%d",&a,&b,&c);或for(x=0;x<10;x++){...}(其中x=0是给x赋初值)等。