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賦初值)等。