2015-02-06 876 views
0

我有這樣的事情,在C中,未初始化的布爾數組的默認值是什麼?

#include <stdio.h> 
#include <stdbool.h> 

int main() 
{ 
    int t,answer; 
    bool count; 
    long long int L; 
    scanf("%d",&t); 
    while(t>0) 
    { 
     answer = 0; 
     scanf(" %lld",&L); 
     bool count[L]; 
    // .....restofthecode. NDA Constraint. 

會是什麼arr[x]所有元素的默認值? 是不是false總是?或者true?或者任何隨機值?

+0

默認值是程序啓動時垃圾在分配的內存位置。 – 2015-02-06 20:35:50

+0

有一個很好的理由,許多新語言甚至不會讓你做這樣的事情。 – user2366842 2015-02-06 20:38:52

+1

不要告訴我們你有* *那樣的東西。向我們展示您的實際代碼。 – 2015-02-06 20:39:56

回答

4

沒有類型名爲C boolean_Boolstdbool.hbool是擴展到_Bool

#include <stdbool.h> 

#define X 42 
bool arr[X]; 

arr元件具有false的初始值(即0)如果在文件範圍中聲明的和不確定的,如果在塊範圍中聲明。

在塊範圍,使用一個初始值設定,以避免元件的不確定的值:

void foo(void) 
{ 
    bool arr[X] = {false}; // initialize all elements to `false` 
} 

編輯:

現在的問題是稍有不同:

long long int x; 
scanf("%lld",&x); 
bool arr[x]; 

這意味着arr是一個可變長度數組。 VLA只能有塊範圍,所以和塊範圍內的任何對象一樣,這意味着數組元素具有不確定的值。您無法在聲明時初始化VLA。您可以爲數組元素分配一個值,例如使用=運算符或使用memset函數。

+0

聲明不能在文件範圍內(假設實際代碼與問題中的內容相似)。 – 2015-02-06 20:40:36

+0

@KeithThompson代碼已更改... – ouah 2015-02-06 20:41:08

+1

您的問題*中的代碼不會編譯*。請更新您的問題;複製並粘貼您提供給編譯器的確切代碼。不要重新輸入。如果你使用'',那麼'#include'指令也應該在問題的代碼中。我們無法猜測哪些錯誤在您的原始代碼中,哪些是在您彙總或重新輸入時引入的。 – 2015-02-06 20:41:56

1

根據你的代碼,在局部範圍內

boolean arr[x]; 

本身是無效的。 x用於未初始化。

只是FYI,在全局[文件]範圍內,所有變量都初始化爲0。在局部範圍內,它們只包含垃圾,除非明確初始化。


編輯:

[後編輯]的arr陣列中所有的變量將具有垃圾值。它在本地範圍[auto]中。

+1

雖然這是一個明白的錯誤,編輯。 – explorer 2015-02-06 20:39:28