當前位置:首頁 » 編程軟體 » 的默認參數值必須為編譯時常量

的默認參數值必須為編譯時常量

發布時間: 2022-03-09 11:46:00

Ⅰ 在java中,方法里的自變數,有沒有默認值

沒有,如果你不傳參進去,調用的就是f()方法,你可以寫一個f()方法,提供默認的int值

Ⅱ 默認參數的用法

c語言中沒有參數默認值的概念,可以利用宏來模擬參數默認值;
在C++中,可以為參數指定默認值。在函數調用時沒有指定與形參相對應的實參時, 就自動使用默認參數。
默認參數的語法與使用:
(1)在函數聲明或定義時,直接對參數賦值。這就是默認參數;
(2)在函數調用時,省略部分或全部參數。這時可以用默認參數來代替。
注意:
(1)默認參數只可在函數聲明中設定一次。只有在無函數聲明時,才可以在函數定義中設定。
(2)默認參數定義的順序為自右到左。即如果一個參數設定了預設值時,其右邊的參數都要有預設值。
如:int mal(int a, int b=3, int c=6, int d=8) 正確,按從右到左順序設定默認值。
int mal(int a=6, int b=3, int c=5, int d) 錯誤,未按照從右到左設定默認值。c設定預設值了,而其右邊的d沒有預設值。
(3)默認參數調用時,則遵循參數調用順序,自左到右逐個調用。這一點要與第(2)分清楚,不要混淆。
如:void mal(int a, int b=3, int c=5); //默認參數
mal(3, 8, 9 ); //調用時有指定參數,則不使用默認參數
mal(3, 5); //調用時只指定兩個參數,按從左到右順序調用,相當於mal(3,5,5);
mal(3); //調用時只指定1個參數,按從左到右順序調用,相當於mal(3,3,5);
mal( ); //錯誤,因為a沒有默認值
mal(3, , 9) //錯誤,應按從左到右順序逐個調用(調用實參,即,實參必須是連續的)
再如: void mal(int a=8, int b=3, int c=5); //默認參數
mal( ); //正確,調用所有默認參數,相當於mal(8,3,5);
(4)默認值可以是全局變數、全局常量,甚至是一個函數。但不可以是局部變數。因為默認參數的調用是在編譯時確定的,而局部變數位置與默認值在編譯時無法確定。

Ⅲ C# 對於實體對象 參數默認值 怎麼設置

你用的是.net4.0的框架么?命名參數
public static void Debug(string message="aaa")
{
}
這種寫法是可以的。但是傳對象的話,4.0應該還不支持吧。
想讓對象有默認值,只需要在get,set的時候,給它設置一個默認值就可以了

Ⅳ C語言中定義int變數,默認值是多少

如果是定義的全局變數或者靜態變數,未初始化的話就是0.如果是局部變數,那就是以前殘留在堆棧里的隨機值。

區分變數的類型,有兩種情況。

1、局部變數。

局部變數在沒有顯式初始化時,其值C語言規范沒做要求,可以是隨機值,也可以是編譯器隨意給定的值。

比如gcc編譯器的局部變數就是隨機值,可能為任何值。而微軟的編譯器,如VC或VS,則會初始化為全c,即0xCCCCCCCC。

2、全局變數或靜態局部變數。

所有的全局變數,即定義在函數外的變數,默認值為0。

所有的靜態局部變數,即定義在函數內部的static int name形式的,默認初始化為0。

(4)的默認參數值必須為編譯時常量擴展閱讀:

int是一種數據類型,在編程語言(C、C++、C#、Java等)中,是用於定義整數類型變數的標識符。

目前在一般的電腦中,int佔用4位元組,32比特,數據范圍為-2147483648~2147483647[-2^31~2^31-1]

在之前的微型機中,int佔用2位元組,16比特,數據范圍為-32768~32767[-2^15~2^15-1]

定義方法:

inti;//定義整形變數i

inti=1;//定義整形變數i並初始化為1

定義常量:

constinti;//編譯錯誤,因為常量需要給予一個初值

constinti=1;//定義常量i,值為1

Java定義常量:

finalinti=1;//定義常量i,值為1

Ⅳ C的函數中的static變數初始值一定要是常量

是的,static變數初始值一定要是常量。
static變數中文名叫靜態變數。它與普通的變數比起來有如下幾個區別:
1)位置:靜態局部變數被編譯器放在全局存儲區.data,所以它雖然是局部的,但是在程序的整個生命周期中存在。
2)訪問許可權:靜態局部變數只能被其作用域內的變數或函數訪問。也就是說雖然它會在程序的整個生命周期中存在,由於它是static的,它不能被其他的函數和源文件訪問。
3)值:靜態局部變數如果沒有被用戶初始化,則會被編譯器自動賦值為0,以後每次調用靜態局部變數的時候都用上次調用後的值。這個比較好理解,每次函數調用靜態局部變數的時候都修改它然後離開,下次讀的時候從全局存儲區讀出的靜態局部變數就是上次修改後的值。

Ⅵ C++ void *pReserved=NULL 用C#怎麼寫

IntPtr pReserved = IntPtr.Zero;

Ⅶ C# 函數參數默認值問題

C# 有2種不同的常量定義方式:編譯時常量(compile-time) 和運行時常量(runtime)。所謂編譯時常量,是以 const關鍵字定義,所謂編譯時是常量則以readonly關鍵字定義。

C# 規定參數的默認值必須是編譯時能確定的常量值。

這些參數的類型可以是 C# 認定的基元類型。還可以包括枚舉類型,以及能設為 null 的任何引用類型。

Color 這個枚舉類屬於運行時常量。

如果硬要寫一個帶默認值的函數,只能利用重寫的方法,例如:

privatevoidPrint(stringmessage)
{
Colorcolor=Color.White;
}

privatevoidPrint(stringmessage,Colorcolor)
{
}

【附】C# 基元類型:

sbyte / byte / short / ushort /int / uint / long / ulong / char / float / double / bool / decimal /object / string

Ⅷ c語言中形參的預設存儲類別是

c語言中形參或者說所有的變數,預設的存儲類別都是auto的。C語言中四種存儲類別:auto、static、extern、register 。

其中大部分均為auto,auto為默認的類別,一般未標明的都是auto;如果標明了哪種類別,那就按標明的來。

(8)的默認參數值必須為編譯時常量擴展閱讀:

形參的作用是實現主調函數與被調函數之間的聯系,通常將函數所處理的數據,影響函數功能的因素或者函數處理的結果作為形參。

沒有形參的函數在形參表的位置應該寫int main(void) 函數也可以有形參和返回值,其形參也稱為命令行參數,由操作系統在啟動程序時初始化,其返回值傳遞給操作系統。

形參的特點:

1、形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參變數。

2、實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值。

3、實參和形參在數量上,類型上、順序上應嚴格一致,否則就會發生類型不匹配的錯誤。

4、在一般傳值調用的機制中只能把實參傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數調用過程中,形參值發生改變,而實參中的值不會變化。而在引用調用的機制當中是將實參引用的地址傳遞給了形參,所以任何發生在形參上的改變實際上也發生在實參變數上。

Ⅸ 創建存儲過程問題

分開2個Command執行啊....
變通下嘛....先用一個Command執行Use database
再執行create proc不就完了嗎?

Ⅹ Flash ActionScript3 function的問題

幫助中如是說:
按值或按引用傳遞參數
在許多編程語言中,一定要了解按值傳遞參數與按引用傳遞參數之間的區別,二者之間的區別會影響代碼的設計方式。
按值傳遞意味著將參數的值復制到局部變數中以便在函數內使用。按引用傳遞意味著將只傳遞對參數的引用,而不傳遞實際值。這種方式的傳遞不會創建實際參數的任何副本,而是會創建一個對變數的引用並將它作為參數傳遞,並且會將它賦給局部變數以便在函數內部使用。局部變數是對函數外部的變數的引用,它使您能夠更改初始變數的值。
在 ActionScript 3.0 中,所有的參數均按引用傳遞,因為所有的值都存儲為對象。但是,屬於基元數據類型(包括 Boolean、Number、int、uint 和 String)的對象具有一些特殊運算符,這使它們可以像按值傳遞一樣工作。例如,下面的代碼創建一個名為 passPrimitives() 的函數,該函數定義了兩個類型均為 int、名稱分別為 xParam 和 yParam 的參數。這些參數與在 passPrimitives() 函數體內聲明的局部變數類似。當使用 xValue 和 yValue 參數調用函數時,xParam 和 yParam 參數將用對 int 對象的引用進行初始化,int 對象由 xValue 和 yValue 表示。因為參數是基元值,所以它們像按值傳遞一樣工作。盡管 xParam 和 yParam 最初僅包含對 xValue 和 yValue 對象的引用,但是,對函數體內的變數的任何更改都會導致在內存中生成這些值的新副本。
function passPrimitives(xParam:int, yParam:int):void
{
xParam++;
yParam++;
trace(xParam, yParam);
}

var xValue:int = 10;
var yValue:int = 15;
trace(xValue, yValue); // 10 15
passPrimitives(xValue, yValue); // 11 16
trace(xValue, yValue); // 10 15

在 passPrimitives() 函數內部,xParam 和 yParam 的值遞增,但這不會影響 xValue 和 yValue 的值,如上一條 trace 語句所示。即使參數的命名與 xValue 和 yValue 變數的命名完全相同也是如此,因為函數內部的 xValue 和 yValue 將指向內存中的新位置,這些位置不同於函數外部同名的變數所在的位置。
其它所有對象(即不屬於基元數據類型的對象)始終按引用傳遞,這樣您就可以更改初始變數的值。例如,下面的代碼創建一個名為 objVar 的對象,該對象具有兩個屬性:x 和 y。該對象作為參數傳遞給 passByRef() 函數。因為該對象不是基元類型,所以它不但按引用傳遞,而且還保持一個引用。這意味著對函數內部的參數的更改將會影響到函數外部的對象屬性。
function passByRef(objParam:Object):void
{
objParam.x++;
objParam.y++;
trace(objParam.x, objParam.y);
}
var objVar:Object = {x:10, y:15};
trace(objVar.x, objVar.y); // 10 15
passByRef(objVar); // 11 16
trace(objVar.x, objVar.y); // 11 16

objParam 參數與全局 objVar 變數引用相同的對象。正如在本示例的 trace 語句中所看到的一樣,對 objParam 對象的 x 和 y 屬性所做的更改將反映在 objVar 對象中。
默認參數值

ActionScript 3.0 中新增了為函數聲明"默認參數值"的功能。如果在調用具有默認參數值的函數時省略了具有默認值的參數,那麼,將使用在函數定義中為該參數指定的值。所有具有默認值的參數都必須放在參數列表的末尾。指定為默認值的值必須是編譯時常量。如果某個參數存在默認值,則會有效地使該參數成為"可選參數"。沒有默認值的參數被視為"必需的參數"。
例如,下面的代碼創建一個具有三個參數的函數,其中的兩個參數具有默認值。當僅用一個參數調用該函數時,將使用這些參數的默認值。
function defaultValues(x:int, y:int = 3, z:int = 5):void
{
trace(x, y, z);
}
defaultValues(1); // 1 3 5

arguments 對象

在將參數傳遞給某個函數時,可以使用 arguments 對象來訪問有關傳遞給該函數的參數的信息。arguments 對象的一些重要方麵包括:
arguments 對象是一個數組,其中包括傳遞給函數的所有參數。
arguments.length 屬性報告傳遞給函數的參數數量。
arguments.callee 屬性提供對函數本身的引用,該引用可用於遞歸調用函數表達式。
注意 如果將任何參數命名為 arguments,或者使用 ...(rest) 參數,則 arguments 對象不可用。
在 ActionScript 3.0 中,函數調用中所包括的參數的數量可以大於在函數定義中所指定的參數數量,但是,如果參數的數量小於必需參數的數量,在嚴格模式下將生成編譯器錯誤。您可以使用 arguments 對象的數組樣式來訪問傳遞給函數的任何參數,而無需考慮是否在函數定義中定義了該參數。下面的示例使用 arguments 數組及 arguments.length 屬性來輸出傳遞給 traceArgArray() 函數的所有參數:
function traceArgArray(x:int):void
{
for (var i:uint = 0; i < arguments.length; i++)
{
trace(arguments[i]);
}
}

traceArgArray(1, 2, 3);

// 輸出:
// 1
// 2
// 3

arguments.callee 屬性通常用在匿名函數中以創建遞歸。您可以使用它來提高代碼的靈活性。如果遞歸函數的名稱在開發周期內的不同階段會發生改變,而且您使用的是 arguments.callee(而非函數名),則不必花費精力在函數體內更改遞歸調用。在下面的函數表達式中,使用 arguments.callee 屬性來啟用遞歸:
var factorial:Function = function (x:uint)
{
if(x == 0)
{
return 1;
}
else
{
return (x * arguments.callee(x - 1));
}
}

trace(factorial(5)); // 120

如果您在函數聲明中使用 ...(rest) 參數,則不能使用 arguments 對象,而必須使用為參數聲明的參數名來訪問參數。
還應避免將 "arguments" 字元串作為參數名,因為它將遮蔽 arguments 對象。例如,如果重寫 traceArgArray() 函數,以便添加 arguments 參數,那麼,函數體內對 arguments 的引用所引用的將是該參數,而不是 arguments 對象。下面的代碼不生成輸出結果:
function traceArgArray(x:int, arguments:int):void
{
for (var i:uint = 0; i < arguments.length; i++)
{
trace(arguments[i]);
}
}

traceArgArray(1, 2, 3);

// 無輸出

在早期的 ActionScript 版本中,arguments 對象還包含一個名為 caller 的屬性,該屬性是對當前函數的引用。ActionScript 3.0 中沒有 caller 屬性,但是,如果您需要引用調用函數,則可以更改調用函數,以使其傳遞一個額外的參數來引用它本身。

熱點內容
a星演算法視頻 發布:2025-01-22 07:55:01 瀏覽:878
快手安卓怎麼直播 發布:2025-01-22 07:54:58 瀏覽:937
買伺服器搭建vpn 發布:2025-01-22 07:53:21 瀏覽:808
路由器忘記密碼如何解 發布:2025-01-22 07:38:47 瀏覽:153
5分鍾視頻編譯 發布:2025-01-22 07:36:33 瀏覽:772
asp執行存儲過程 發布:2025-01-22 07:35:55 瀏覽:126
鎮政府搭建伺服器 發布:2025-01-22 07:32:13 瀏覽:1001
安卓系統可以查去過哪裡嗎 發布:2025-01-22 07:25:05 瀏覽:27
三星手機怎麼設置熱點密碼 發布:2025-01-22 07:20:11 瀏覽:38
Ip呼叫伺服器 發布:2025-01-22 07:19:32 瀏覽:634