2011-12-31 56 views
3

我剛剛開始學習C,並直接從書中複製此內容。有人能告訴我爲什麼這不起作用嗎?數據類型簡介

#include <stdio.h> 

int main (void) 
{ 
    int  integerVar = 100; 
    float floatingVar = 331.79; 
    double doubleVar = 8.44e+11; 
    char charVar = "W"; 

    _Bool boolVar = 0; 

    printf ("integerVar = %i\n", integerVar); 
    printf ("floatingVar = %f\n", floatingVar); 
    printf ("doubleVar = %e\n", doubleVar); 
    printf ("doubleVar = %g\n", doubleVar); 
    printf ("charVar = %c\n", charVar); 

    printf ("boolVar = %i\n", boolVar); 

    return 0; 
} 

我得到這個錯誤:

datatypes.c: In function ‘main’: 
datatypes.c:8: warning: initialization makes integer from pointer without a cast 

回答

6

的問題在這裏:

char charVar = "W"; 

你可能是指:

char charVar = 'W'; 

"W"是一個字符串。 'W'是一個字符。後者是你想要的。

3

它應該是'w'而不是"w"。後者是一個以零結尾的字符串,即它是一個指向char數組的指針。

3

"W"不是字符而是字符串常量。你想要的是'W'

而一個字符串常量是一個指向字符數組的指針(在這種情況下爲{ 'W', 0 }),因此警告:「初始化使指針中的整數不經過轉換」。

這裏的「整數」是指被理解爲任何整數類型(字符,短,整型,長,很長很長的編譯器定義它,他們的無符號變體,以及其衆多的typedef ...)

2

"W"代表char*或C字符串。
'W'代表一個char或單個單字節字符,並且是您想要的。

單/雙引號是區分兩者的區別。

1

char charVar="W"; 在這個例子中是不正確的,因爲「W」是一個字符串,並被視爲指向字符數組的指針。將其更改爲'W'以使其成爲角色。

0

在C中,字符串和字符之間有區別。實際上,字符串是字符序列,定義爲char[length]或甚至char*(可變長度)。因爲它是多個char s,它需要一個「指針」(不用擔心,我不會解釋)。

爲了讓C編譯器知道char和string之間的區別,它發明了兩種引號:單引號和雙引號。 A char使用單引號('W'),字符串使用雙引號("W")。

你可以聲明這樣的字符串:雖然單個字符聲明如下

char* myString = "this is a string"; 

char charVar = 'W'; 

底線:一個字符串是char個序列,並與定義雙引號。一個字符用單引號定義。