2013-11-10 43 views
0

我有一個兩行的數組,其中第一個包含所有素數達997的數據。第二行應包含初始化時的所有0,因爲它們稍後將通過for-loop給出值。然而,當我以下面的方式初始化數組:在C中只初始化一行二維數組?

nt prime(int numfac[2][168], int num){ 
int j = 0, i = 0; 
int numfac[][] = { 
        {2,3,5,7,1,13,17,19, 
        23,29,31,37,41,43, 
        47,53,59,61,67,71, 
        73,79,83,89,97,101, 
        103,107,109,113,127, 
        131,137,139,149,151, 
        157,163,167,173,179, 
        181,191,193,197,199, 
        211,223,227,229,233, 
        239,241,251,257,263, 
        269,271,277,281,283, 
        293,307,311,313,317, 
        331,337,347,349,353, 
        359,367,373,379,383, 
        389,397,401,409,419, 
        421,431,433,439,443, 
        449,457,461,463,467, 
        479,487,491,499,503, 
        509,521,523,541,547, 
        557,563,569,571,577, 
        587,593,599,601,607, 
        613,617,619,631,641, 
        643,647,653,659,661, 
        673,677,683,691,701, 
        709,719,727,733,739, 
        743,751,757,761,769, 
        773,787,797,809,811, 
        821,823,827,829,839, 
        853,857,859,863,877, 
        881,883,887,907,911, 
        919,929,937,941,947, 
        953,967,971,977,983, 
        991,997}, 
        {0} 
        }; 

我的編譯器返回:「陣列型具有不完整的元素類型」。

如何初始化C中的一個二維數組的一行?先謝謝你。

+1

你可能會列出你得到的編譯器錯誤。我懷疑它與你提供的第二行只有一個值有關,而不是168個值。 – Dweeberly

+0

@Dweeberly - 編輯器編譯錯誤。我想如果初始化的數量少於數組中的元素數量,其餘的會自動初始化爲0? – supersaidso

+0

你可能是對的,因此我的編譯器錯誤的請求。你看起來很像一個「不規則數組」的初始化,編譯器可能會感到困惑。 ......我在:-)的時候很晚 – Dweeberly

回答

0

您可以使用for循環來初始化一行中的168列。

Ex。

int i; 
for (i = 0; i < 168; i ++) 
{ 
    numfac[1][i] = 0; 
} 

需要注意的是一個數組聲明numfac [2] [168]實際上將包含元素[0,1]和[0,1,2 ...... 167]很重要。另外,如果沒有設置一個值,那麼它將是NULL,這將導致嚴重的錯誤計算。

+0

這實際上會做什麼?我不明白numfac [1] [i] = 0;確實。我需要第一行中的元素成爲997以上的素數,我不知道如何通過for循環做到這一點。我認爲你給我的代碼會將第二行初始化爲全零,是嗎? – supersaidso

+0

這是爲了回答你的問題「如何初始化c中的兩個二維數組中的一行?」通過使用這個for循環,它將單行中的每一列初始化爲零,如您所說。 – River

+1

「如果沒有設置一個值,那麼它將是NULL」,除非它是靜態的,否則它是不正確的。 – kleszcz