2013-01-12 26 views
1

我有如下原型void init(int *argc,char**argv);但在這個功能在我的計劃,我不需要或者甚至需要提供這樣的論證的後續調用的函數。所以,我做了一個名爲int_null(哦,糟糕的名字,我知道)變量,並傳遞給函數init(&int_null, NULL)但來到我的腦海裏NULL具有零的標準值,我可以用它代替int_null變量(只是爲了規避創建這個變量),作爲下面的init(NULL,NULL)它工作正常。但是我可以有一些問題嗎?一些實現定義NULL(void*)000L,我敢肯定,如果它可以是一個問題。該功能需要了解argc爲零。我可以傳遞一個NULL,其中int *是預期的嗎?

+0

我相信,如果有'ptr'是任何一個指針類型的幾乎所有你能始終指定'PRT = NULL'沒有強制類型轉換並沒有什麼問題 –

回答

5
char **bla1 = (void *) 0; 
char **bla2 = 0; 
char **bla3 = 0L; 

所有這些分配(初始化作爲每個分配新建分配FY完成)在C和等同有效的。

如果預期參數的類型爲int *char **,則可以始終傳遞NULL

由於在他的評論中增加了@R..,這最後一句是真實的,但接受可變數量的參數和函數的原型(老式)語法中定義的函數是例外。在這兩種情況下都需要演員陣容。

+0

嗨Ouah! ..請查看我對這個問題的評論,並讓我知道如果我錯了。並且很好回答! –

+1

@GrijeshChauhan它始終是隻要真如'ptr'是指向對象或一個指向'void'('ptr'不能是一個函數指針)。 – ouah

+0

這對於沒有原型的可變參數函數和函數是錯誤的... –

2

NULL應該工作;既0(void *)0可以分配給任何指針類型中C.

相關問題